如何恢复Python 2.7 logging模块的默认配置?
解决logging默认级别被修改无法恢复的问题
这种情况我之前排查过好几次,大概率是有代码或配置悄悄修改了logging的全局状态,或者虚拟环境里存在隐藏的配置文件在搞鬼。咱们一步步来定位问题:
1. 先尝试强制重置logging配置
REPL里调用basicConfig无效,是因为logging一旦被初始化(比如有过日志输出或者调用过basicConfig),默认情况下后续的basicConfig不会覆盖已有配置。你可以试试带force=True参数强制重置:
import logging logging.basicConfig(level=logging.WARNING, force=True) # 测试一下 logging.warning("测试警告") # 应该能正常输出了
同时可以先查看当前根logger的级别,确认问题:
print(logging.getLogger().level) # 看看是不是40(CRITICAL)
2. 排查是否有代码提前修改了全局配置
检查你的项目代码或者依赖包中,有没有地方直接修改了根logger的级别,比如:
# 这类代码会全局修改logging级别 logging.getLogger().setLevel(logging.CRITICAL) # 或者提前调用了带高级别的basicConfig logging.basicConfig(level=logging.CRITICAL)
如果是依赖包的问题,可以单独在虚拟环境里启动REPL,不导入任何项目代码,直接打印根logger级别——如果此时已经是40,那问题就不在你的代码里。
3. 检查虚拟环境中的logging配置文件
Python的logging模块会自动读取特定路径的配置文件,你可以排查这些位置:
- 虚拟环境的
site-packages目录下有没有logging.conf或logging.ini文件; - 检查系统环境变量
LOGGING_CONFIG,看看是否指向了某个自定义配置文件:- Linux/macOS终端执行:
echo $LOGGING_CONFIG - Windows终端执行:
echo %LOGGING_CONFIG%
- Linux/macOS终端执行:
- 项目根目录下有没有
.logging.conf、logging.yaml等被代码加载的配置文件,比如是否有代码调用了:logging.config.fileConfig("logging.conf") # 或者 logging.config.dictConfig(your_config_dict)
4. 排查虚拟环境的启动脚本
有些虚拟环境会在Python启动时自动执行sitecustomize.py或usercustomize.py脚本,这些脚本可能会偷偷修改logging配置。你可以在REPL里执行以下命令找到对应目录:
import site # 查看site-packages目录 print(site.getsitepackages()) # 查看用户自定义脚本目录 print(site.getusersitepackages())
检查这些目录下是否存在上述两个文件,里面有没有修改logging级别的代码。
5. 验证REPL和单独运行代码的差异
单独运行代码时Python是全新启动的,没有之前的配置残留;而REPL会保留会话中的所有状态。你可以试试重启REPL,不执行任何项目代码,直接打印logging.getLogger().level:
- 如果此时级别是30(WARNING),说明是你的项目代码或导入的依赖修改了配置;
- 如果还是40,说明虚拟环境启动时就被修改了,大概率是配置文件或启动脚本的问题。
内容的提问来源于stack exchange,提问作者user3482876
相关产品推荐
相关产品推荐

