求助:Django配置INFO级别日志但仅收集WARNING及以上内容
Django INFO级别日志未记录的排查方向
1. 确认环境变量LOG_LEVEL的实际生效值
- 在
settings.py中添加print(LOG_LEVEL),启动服务时查看控制台输出,确认是否为'INFO'——排查.env文件加载失败、变量被后续代码覆盖的情况。 - 检查.env文件是否被正确加载,比如是否通过
python-dotenv在settings.py开头执行了load_dotenv()。
2. 给日志处理器显式设置级别
当前配置仅给logger设置了级别,部分handler可能存在默认过滤逻辑。给rotatingFile handler添加级别配置,确保它会放行INFO及以上日志:
'handlers': { 'rotatingFile': { 'class': 'logging.handlers.RotatingFileHandler', 'formatter': 'verbose', 'maxBytes': LOG_MAX_SIZE, 'backupCount': LOG_NUMBER_OF_FILES, 'filename': LOG_LOCATION, 'level': LOG_LEVEL, # 新增此行 } },
3. 排查logger的传播与覆盖问题
- 你配置的多个logger(如
django、main)都设置了propagate: False,需确认代码中实际使用的logger名称是否与配置完全匹配。比如代码中用logging.getLogger('django.request'),而你仅配置了django父logger,可临时将propagate改为True,测试是否能捕获到INFO日志,排查是否存在未配置的子logger。 - 检查第三方应用、自定义中间件是否在
ready()方法或其他逻辑中修改了logging配置,覆盖了你的级别设置。
4. 验证INFO日志的生成逻辑
- 在视图或核心代码中手动添加测试日志:
logging.getLogger(__name__).info('Test INFO log'),触发后查看日志文件,确认是配置问题还是代码未生成INFO级日志。 - 注意Django默认请求日志的规则:当
DEBUG=True时,django.request的日志级别为DEBUG,不会生成INFO级的请求日志;只有DEBUG=False时,才会记录200响应这类INFO级日志。如果当前应用处于DEBUG模式,这可能是你看不到请求INFO日志的核心原因。
5. 检查日志文件的基础问题
- 确认
LOG_LOCATION指向的目录存在,且Django进程有写入权限(虽然WARNING能写入时权限问题概率低,但仍需排除)。 - 检查日志文件是否已触发旋转,确认你查看的是最新的日志文件而非旧备份文件。
内容的提问来源于stack exchange,提问作者Derek M
相关产品推荐
相关产品推荐

