如何关闭Django输出到控制台的INFO级别日志?
你的配置存在两个核心问题:
- root日志的级别设置为
INFO,自然会输出所有INFO及以上级别的日志 - 如果你调用
logging.disable(logging.CRITICAL)的位置在LOGGING配置之前,会被后续加载的日志配置覆盖,完全不生效
下面是对应的解决方案:
方案1:调整现有配置屏蔽INFO日志
仅需把root配置中的level改为WARNING(日志级别优先级:DEBUG < INFO < WARNING < ERROR < CRITICAL),即可过滤掉所有INFO及更低级别的日志:
LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'handlers': { 'console': { 'class': 'logging.StreamHandler', }, }, 'root': { 'handlers': ['console'], 'level': 'WARNING', 'propagate': False }, }
如果需要彻底关闭所有控制台日志输出,可以直接使用NullHandler丢弃所有日志:
LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'handlers': { 'null': { 'class': 'logging.NullHandler', }, }, 'root': { 'handlers': ['null'], 'level': 'CRITICAL', 'propagate': False }, }
方案2:正确调用全局禁用方法
如果要使用logging.disable全局关闭日志,必须将调用代码放在LOGGING配置的下方:
# 先写LOGGING配置 LOGGING = { # 你的配置内容 } # 再调用disable方法 import logging logging.disable(logging.CRITICAL)
常见坑排查
- 如果你使用Django自带的开发服务器
runserver,启动时添加--noreload参数,避免自动重载的子进程加载默认日志配置覆盖你的设置 - 如果仅部分第三方APP仍输出INFO日志,可以在LOGGING中单独为该包配置日志级别,示例如下:
LOGGING = { # 原有配置不变 'loggers': { # 替换为对应第三方包的logger名称 'some_third_party_app': { 'level': 'WARNING', 'propagate': False, }, } }
内容的提问来源于stack exchange,提问作者dandoo99
相关产品推荐
相关产品推荐

