Python日志仅记录Error级信息,Info级无输出排查求助
问题描述
在Python中使用logging模块时,无法查看Error级别以下的日志。已检查日志流程的所有环节(包括logger级别、handler、logger和handler层面的过滤器),精简代码后功能正常,但实际场景中问题复现。
相关代码
import logging class DebugConsoleHandler(logging.Handler): def emit(self, record): print(f"Custom Handler: {record.levelname} - {record.msg}") log.addHandler(DebugConsoleHandler()) log.error("Initialized llm_route in verifications") log.error(f"Logger name {log.name}") log.error("Logging Level %s", log.level) log.setLevel(logging.NOTSET) log.error("Logging Level %s", log.level) log.error("Logging Handlers %s", log.handlers) log.error("Logging filters %s", log.filters) for handler in log.handlers: log.error(handler.filters) # # record = logging.LogRecord("test", level=20, msg="test") # handler.emit("Test Message") log.info( f'Received text generation request from user "{get_current_user().name}" ' f'for challenge ID "{request.json["challenge_id"]}"' ) log.error( f'Received text generation request from user "{get_current_user().name}" ' f'for challenge ID "{request.json["challenge_id"]}"' )
现象说明
截图显示日志输出中仅出现Error级别的日志,Info级别的日志未被输出。
排查与解决建议
- 给自定义Handler显式设置级别:你的
DebugConsoleHandler没有设置日志级别,虽然默认是NOTSET,但如果存在父级配置限制,可能会过滤Info日志。添加级别设置:handler = DebugConsoleHandler() handler.setLevel(logging.INFO) # 显式允许Info及以上级别 log.addHandler(handler) - 关闭日志传播:如果当前logger的
propagate为True,父logger的级别或过滤器会影响输出。尝试关闭传播:log.propagate = False - 排查全局日志配置:实际场景中可能有其他代码(比如框架初始化、第三方库)修改了全局logging配置,覆盖了当前logger设置。可以检查
logging.root的级别和handler配置,确认是否有全局限制。 - 验证Info日志内容是否合法:Info日志中的
get_current_user().name或request.json["challenge_id"]可能抛出异常,导致日志无法生成。先替换为固定值测试:log.info('Received text generation request from user "test_user" for challenge ID "test_challenge"') - 确认过滤器实际行为:虽然打印了过滤器列表,但过滤器的
filter方法可能实际过滤了Info日志。可以临时移除所有过滤器,或者在过滤器中添加调试输出,确认是否拦截了Info级别的LogRecord。
内容的提问来源于stack exchange,提问作者canyon289
相关产品推荐
相关产品推荐

