Django配置日志后无法记录Warning以下级别日志的问题
Django DEBUG级别日志不输出问题排查与解决
问题描述
在Django框架中配置日志时,已将handler和logger的日志级别均设置为DEBUG,但仅能输出Warning及以上级别的日志,INFO和DEBUG级别的日志未被记录。代码中打印的logger.level为10(对应DEBUG级别),但日志仍无输出。
核心原因
最可能的问题是logger实例未正确关联到settings.py中配置的app logger。如果logger的名称与配置中的app不匹配(包括子模块继承场景),配置的日志规则就不会生效。
解决方案
1. 正确初始化logger
在app/views/test.py中,使用以下方式获取logger:
import logging # 方式1:用模块名自动关联到app logger(推荐) logger = logging.getLogger(__name__) # 方式2:明确指定app logger名称 # logger = logging.getLogger('app')
__name__会自动解析为app.views.test,作为app logger的子logger,会继承父logger的级别、handler等配置。如果之前用其他名称(比如空字符串logging.getLogger())创建logger,就无法匹配到settings里的配置规则。
2. 验证logger关联状态
在test函数中添加调试代码,确认logger的配置关联情况:
print("Logger name:", logger.name) print("Logger handlers:", [h.__class__.__name__ for h in logger.handlers]) print("Effective level:", logger.getEffectiveLevel())
- 若
logger.name不是app或其子模块名,说明初始化错误 - 若
handlers列表为空,说明logger未关联到配置的console handler getEffectiveLevel()应返回10(DEBUG),否则说明级别配置未生效
3. 检查LOGGING配置细节
确保settings.py中的LOGGING配置无遗漏:
- 确认
'disable_existing_loggers'设为False,避免覆盖已存在的logger - 确认
applogger的'level'为'DEBUG',且'handlers'包含'console'
验证修改
修改后重新运行代码,INFO和DEBUG级别的日志应正常输出:
INFO 2023-12-05 07:06:46,933 test This is an informational message. DEBUG 2023-12-05 07:06:46,933 test This is a debug message. WARNING 2023-12-05 07:06:46,934 test This is a warning message. ERROR 2023-12-05 07:06:46,935 test This is an error message. CRITICAL 2023-12-05 07:06:46,935 test This is a critical message.
内容的提问来源于stack exchange,提问作者Alok Kumar
相关产品推荐
相关产品推荐

