Django日志问题:INFO级别日志无法写入文件
Django日志配置问题:INFO/DEBUG日志无输出的解决办法
问题根源
你当前的LOGGING配置里,loggers字段下重复定义了三次"main"键——Python字典不允许重复键,后面的定义会直接覆盖前面的。最后实际生效的只有最后那个绑定efile和console、级别为ERROR的main配置,所以只有ERROR级别的日志能输出到error.log,INFO和DEBUG日志根本没被对应的handler处理,自然info.log和debug.log是空的。
解决方案
正确的做法是用单个logger绑定多个handler,再给每个handler设置对应的日志级别过滤,让不同级别的日志流向不同文件。修改后的完整配置如下:
LOGGING = { "version": 1, "disable_existing_loggers": False, "formatters": { "main_formatter": { "format": "{asctime}-{levelname}-{module}-{funcName}-{message}", "style": "{", }, }, "handlers": { "console": { "class": "logging.StreamHandler", "formatter": "main_formatter", "level": "DEBUG", # 控制台输出所有级别日志 }, "dfile": { "class": "logging.FileHandler", "filename": "logs/debug.log", "formatter": "main_formatter", "level": "DEBUG", # 只处理DEBUG及以上级别 }, "file": { "class": "logging.FileHandler", "filename": "logs/info.log", "formatter": "main_formatter", "level": "INFO", # 只处理INFO及以上级别 }, "efile": { "class": "logging.FileHandler", "filename": "logs/error.log", "formatter": "main_formatter", "level": "ERROR", # 只处理ERROR及以上级别 }, "gfile": { "class": "logging.FileHandler", "filename": "logs/gunicorn.log", "formatter": "main_formatter", "level": "DEBUG", }, }, "loggers": { "main": { "handlers": ["console", "dfile", "file", "efile"], "propagate": True, "level": "DEBUG", # logger级别设为最低,确保所有级别日志都能被捕获 }, "gunicorn.access": { "handlers": ["gfile", "console"], "propagate": False, "level": "DEBUG", }, }, }
关键修改说明
- 给handler添加级别过滤:每个handler通过
level参数指定要处理的最低日志级别,比如dfile接收DEBUG及以上所有日志,file只接收INFO及以上日志,实现不同级别日志分文件存储。 - 合并重复的main logger:只保留一个
"main"logger,绑定所有需要的handler,并且将其级别设为DEBUG(最低级别),确保所有级别的日志都能被捕获,再分发给各个handler过滤处理。 - 保持gunicorn配置不变:原gunicorn日志配置逻辑正常,无需修改。
验证方法
修改配置后重启Django服务,执行以下日志代码:
import logging logger = logging.getLogger(__name__) logger.debug("这是一条DEBUG测试日志") logger.info(f"Password Generated and Sent to {email}") logger.error(f"{request.user}: Erreur interne. Code [LI.001]")
此时logs目录下的debug.log、info.log、error.log应该都会有对应的日志输出。
内容的提问来源于stack exchange,提问作者Kaiss B.
相关产品推荐
相关产品推荐

