Python日志第二次调用run函数时无Info日志输出的原因排查
问题原因解析
第二次调用run函数无Info日志输出的核心原因,是Python logging模块中fileConfig()方法的默认行为:
- 首次调用
fileConfig()时,会根据配置文件完成日志系统的初始化,包括创建对应名称的日志器、设置日志级别、绑定处理器等操作。 fileConfig()的默认参数disable_existing_loggers=True,该参数的作用是:每次调用fileConfig()时,自动禁用所有在调用前已存在的日志器。- 第二次调用
run函数时,logging.getLogger(__name__)获取的是第一次调用时就已经创建的日志器实例,此时执行fileConfig()会触发默认的禁用逻辑,导致该日志器无法输出任何日志。
可行的解决方式
- 方式一:调用
fileConfig()时显式关闭禁用已存在日志器的逻辑:
这样第二次调用时不会禁用之前创建的日志器,日志就能正常输出。logging.config.fileConfig(os.path.join(here, "conf_log.ini"), disable_existing_loggers=False) - 方式二:将日志配置的初始化逻辑移到
run函数外部,在程序启动时仅执行一次,避免重复调用fileConfig()带来的冲突。
内容的提问来源于stack exchange,提问作者Alex Yin
相关产品推荐
相关产品推荐

