pipeline(
task=Tasks.auto_speech_recognition,
model=current_app.config['VIDEO_MODEL'],
model_revision="v1.2.4",
vad_model=current_app.config['VAD_MODEL'],
vad_model_revision="v1.2.0",
punc_model=current_app.config['PUNC_MODEL'],
punc_model_revision="v1.1.7")
在modelscope-funasr使用flask调用设置了这个asr,会导致别的地方的日志设置无效,怎么回事?
在使用 modelscope-funasr
的自动语音识别(ASR)功能时,通过 Flask 调用设置了以下 pipeline
配置:
pipeline(
task=Tasks.auto_speech_recognition,
model=current_app.config['VIDEO_MODEL'],
model_revision="v1.2.4",
vad_model=current_app.config['VAD_MODEL'],
vad_model_revision="v1.2.0",
punc_model=current_app.config['PUNC_MODEL'],
punc_model_revision="v1.1.7"
)
如果发现其他地方的日志设置无效,可能是由于以下原因导致的:
modelscope-funasr
内部可能对日志系统进行了全局配置,覆盖了您在 Flask 应用中设置的日志配置。这种问题通常发生在以下场景: - modelscope-funasr
使用了 Python 的 logging
模块,并调用了 logging.basicConfig()
或类似方法重新初始化日志系统。 - 日志处理器(Handler)被清空或替换,导致原有日志配置失效。
解决方法: - 在 Flask 应用启动时,确保您的日志配置在 modelscope-funasr
初始化之后执行。例如:
import logging
# Flask 应用日志配置
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
# 初始化 modelscope-funasr pipeline
asr_pipeline = pipeline(
task=Tasks.auto_speech_recognition,
model=current_app.config['VIDEO_MODEL'],
model_revision="v1.2.4",
vad_model=current_app.config['VAD_MODEL'],
vad_model_revision="v1.2.0",
punc_model=current_app.config['PUNC_MODEL'],
punc_model_revision="v1.1.7"
)
# 重新应用 Flask 的日志配置
logger = logging.getLogger()
for handler in logger.handlers:
logger.removeHandler(handler)
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
modelscope-funasr
提供了自定义日志配置选项,建议查阅其文档并调整日志级别或禁用其日志初始化逻辑。Flask 应用通常运行在多线程或异步环境中,而 modelscope-funasr
的日志系统可能未正确处理线程安全或上下文隔离,导致日志输出混乱或配置被覆盖。
解决方法: - 确保每个线程或协程的日志配置独立。可以通过为每个线程设置独立的 logging.Logger
实例来实现:
import threading
import logging
# 创建线程本地存储
thread_local = threading.local()
def get_logger():
if not hasattr(thread_local, "logger"):
logger = logging.getLogger(f"thread-{threading.get_ident()}")
handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.INFO)
thread_local.logger = logger
return thread_local.logger
# 在需要记录日志的地方调用
logger = get_logger()
logger.info("This is a thread-safe log message.")
某些第三方库(如 modelscope-funasr
)可能会默认启用调试日志,导致日志输出过多或覆盖您的配置。
解决方法: - 显式设置 modelscope-funasr
的日志级别为 WARNING
或更高,避免其干扰您的日志系统:
logging.getLogger("modelscope").setLevel(logging.WARNING)
modelscope-funasr
提供了日志级别配置参数,建议在初始化时显式指定日志级别。为了彻底避免日志冲突,可以将 Flask 应用的日志和 modelscope-funasr
的日志输出到不同的文件或流中。
解决方法: - 配置独立的日志处理器:
import logging
# Flask 应用日志
flask_logger = logging.getLogger("flask")
flask_handler = logging.FileHandler("flask.log")
flask_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
flask_logger.addHandler(flask_handler)
flask_logger.setLevel(logging.INFO)
# modelscope-funasr 日志
funasr_logger = logging.getLogger("modelscope")
funasr_handler = logging.FileHandler("funasr.log")
funasr_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
funasr_logger.addHandler(funasr_handler)
funasr_logger.setLevel(logging.WARNING)
上述问题的根本原因在于 modelscope-funasr
的日志系统可能覆盖了 Flask 应用的日志配置。通过以下措施可以有效解决: 1. 调整日志初始化顺序,确保 Flask 的日志配置优先。 2. 隔离日志配置,避免多线程或异步环境中的冲突。 3. 限制第三方库的日志输出,避免其干扰主应用。 4. 分离日志输出目标,将不同模块的日志写入独立文件。
如果问题仍未解决,建议检查 modelscope-funasr
的具体日志实现细节,或联系其技术支持团队获取进一步帮助。
ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!欢迎加入技术交流群:微信公众号:魔搭ModelScope社区,钉钉群号:44837352