Python logging:未单独配置的logger为何未复用root logger输出日志
故障原因与修复方案
核心原因
- 配置字段拼写错误:配置中所有
propogate字段拼写错误,正确字段名为propagate,错误拼写会导致日志向上传播规则不生效。 disable_existing_loggers配置逻辑问题:disable_existing_loggers: true配置会在加载配置时,禁用所有已经完成初始化、且未在配置loggers节点中明确声明的logger实例。如果logger = logging.getLogger(__name__)执行在dictConfig加载配置之前,对应logger会被直接禁用,日志既不会主动输出,也不会传递给root logger处理。- 外设依赖异常:如果192.168.0.100的514端口未开启syslog接收服务、网络不通,同时日志文件存放路径无写入权限,也会导致两类handler都无法输出日志。
修复步骤
- 把配置中所有的
propogate修正为propagate - 将
disable_existing_loggers改为false,或者调整代码顺序,保证所有getLogger操作都在配置加载完成之后执行 - 调试阶段可临时将root的handlers仅保留
rotating_file,排除syslog连通性的干扰,同时检查日志文件所在目录的写入权限 - 读取yaml配置时显式指定编码,避免跨环境编码解析异常:
log_config = yaml.safe_load(open('logger-cfg.yml', encoding='utf-8')) logging.config.dictConfig(log_config)
内容的提问来源于stack exchange,提问作者Joysn
相关产品推荐
相关产品推荐

