You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中logging.getLogger(__name__)默认继承规则不生效问题

问题原因

  1. logging.config.fileConfig 方法默认将 disable_existing_loggers 参数设为 True,调用该方法后,所有配置加载前已经创建的非根日志器都会被自动禁用。
  2. 你的代码在初始化日志配置前就已经导入了ModuleB下的模块,模块导入时就执行了logging.getLogger(__name__)创建了对应日志器,这些日志器后续被配置逻辑禁用,自然无法输出日志。
    根日志器不受disable_existing_loggers参数影响,所以直接获取根日志器可以正常输出,但会丢失模块来源信息。

解决方案

方案1:修改配置调用参数

直接在调用fileConfig时添加disable_existing_loggers=False,禁止自动禁用已创建的日志器,修改后__main__.py的对应代码为:

import logging
import logging.config

if __name__ == '__main__':
    # 初始化日志配置,关闭自动禁用已有日志器的逻辑
    logging.config.fileConfig(fname='FILE.ini', disable_existing_loggers=False)
    logger = logging.getLogger(__name__)  
    logger.info('The APP has started')
    logger.debug('This goes to the logfile')
    # 业务模块导入放在日志初始化之后也可正常工作
    import ModuleB

方案2:调整导入顺序

所有业务模块的导入操作放到日志配置初始化之后执行,避免在配置加载前创建子模块日志器。注意不要在__main__.py的顶部导入业务模块,统一放到日志初始化完成后再导入。

额外排查点

如果调整后仍有问题,可以检查你的FILE.ini配置:

  • 确认根日志器的日志级别设置不高于你需要输出的级别(比如根日志器设为WARNING的话,INFO级别的日志自然不会输出)
  • 确认你配置的handler没有设置过高的过滤级别,也没有额外的过滤规则屏蔽子模块日志

内容的提问来源于stack exchange,提问作者AbianG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:54:04