如何在Django的settings.py中输出INFO级别的日志?
Django中settings.py里INFO日志不显示的问题解决
问题根源
你遇到的问题有两个核心原因:
- 未正确获取logger实例:代码里直接调用
logger.info,但未定义logger变量,必须通过logging.getLogger()方法获取日志实例才能使用。 - LOGGING配置在settings加载阶段未生效:Django会在settings文件完全加载完成后,才根据
LOGGING配置初始化日志系统。因此在settings.py中直接执行的日志代码,会使用Python默认的日志配置(默认级别为WARNING,低于该级别的INFO日志不会被输出)。
解决方案
方案1:将日志代码移至Django初始化完成后的位置
不要在settings.py里直接执行日志输出,把测试代码放到以下位置:
- 视图函数(views.py)
- 自定义management命令
- 项目的
wsgi.py/asgi.py文件(在Django初始化代码之后)
方案2:手动强制加载LOGGING配置(仅用于测试)
如果一定要在settings.py中输出日志,可以在定义LOGGING后手动调用配置加载方法,同时修正logger的获取逻辑:
修正后的代码示例:
import logging import logging.config ... LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'class': 'logging.StreamHandler', }, }, 'root': { # 用'root'代替空字符串,可读性更强,功能完全一致 'handlers': ['console'], 'level': 'INFO', 'propagate': True }, } # 手动加载日志配置,让配置立即生效 logging.config.dictConfig(LOGGING) ... def do_something(): # 获取当前模块的logger实例 logger = logging.getLogger(__name__) logger.info('Doing Something') do_something()
额外说明
- 生产环境不建议在settings.py中执行日志输出或手动加载配置,遵循Django的初始化流程能避免潜在的配置冲突问题。
内容的提问来源于stack exchange,提问作者Frantz Paul
相关产品推荐
相关产品推荐

