Flask微服务日志问题:utils.py日志无法输出至控制台
解决Flask中utils.py日志无法输出到控制台的问题
这个问题我之前也碰到过,核心原因是Flask的app.logger是已经配置好的日志实例,而你在utils里新建的logger默认没有继承Flask的日志配置,所以debug级别的消息发不出来。下面给你几个靠谱的解决方案:
方案1:复用Flask的应用日志(推荐)
直接在utils.py里使用Flask提供的日志实例,不用自己新建logger:
# utils.py from flask import current_app def some_util_function(): current_app.logger.debug('SOME MESSAGE')
只要这个工具函数是在Flask的请求上下文(或者应用上下文)里被调用的(比如api.py的路由处理函数里调用它),current_app就能正常获取到Flask应用实例,日志也会和app.logger一样输出到控制台。
方案2:让utils的logger继承Flask的日志配置
如果你不想依赖current_app,可以在api.py启动时,把Flask的日志配置同步给utils的logger:
# api.py from flask import Flask from utils import logger as utils_logger app = Flask(__name__) # 同步Flask的日志处理器和级别到utils的logger for handler in app.logger.handlers: utils_logger.addHandler(handler) utils_logger.setLevel(app.logger.level) # 你的路由和其他代码...
对应的utils.py里保持你原来的logger定义就行:
# utils.py import logging logger = logging.getLogger('utils') def some_util_function(): logger.debug('SOME MESSAGE')
这样utils的logger就会和app.logger使用完全相同的输出配置,包括控制台输出、日志级别、格式等。
为什么你的临时方法不好?
你提到用了糟糕的临时方案,大概率是直接用print()或者手动硬编码日志输出逻辑——这种方式不仅没法统一日志格式,后期如果要扩展日志功能(比如输出到文件、按级别拆分日志),需要改大量代码,完全不符合日志模块的设计初衷。
内容的提问来源于stack exchange,提问作者nanounanue
相关产品推荐
相关产品推荐

