Django配置Logging后500等硬错误未写入指定日志文件问题咨询
Django ERROR日志未写入指定文件排查方案
- 确认配置生效
先确认你修改的是当前运行环境实际加载的settings.py文件,多环境拆分配置的场景下很容易误改非加载的配置文件。可以在项目启动入口加打印代码print(settings.LOGGING),确认运行时的日志配置和你编写的一致。 - 补充根日志配置
你当前仅配置了django命名空间的logger,仅能捕获Django框架本身抛出的错误,你自己编写的应用代码、第三方依赖抛出的ERROR日志不属于django命名空间,不会被该logger捕获。可以在LOGGING配置中补充根logger规则,捕获所有命名空间的ERROR日志:LOGGING = { # 原有配置保留,新增以下root配置 'root': { 'handlers': ['file'], 'level': 'ERROR', } } - 检查DEBUG开关状态
如果你的DEBUG配置项为True,Django调试模式会默认将错误输出到控制台,覆盖自定义的日志写入逻辑,生产环境需设置DEBUG = False才会触发你配置的文件日志写入。 - 调整日志传播配置
你当前配置的propagate = True会将日志向上传递给父logger,如果上层存在其他logger拦截了ERROR日志,也会导致日志无法落到你的文件handler,可暂时将该值改为False测试是否能正常写入。 - 检查上层目录权限
即使日志文件本身已经设置777权限,如果上层目录/opt/python/log/没有给Django运行进程的用户开放读写执行权限,依然无法写入文件。可以执行ls -ld /opt/python/log/查看目录权限,确保Django运行用户对该目录有rwx权限。 - 排查配置冲突
如果你引入了日志相关的第三方依赖(如django-debug-toolbar、日志采集类SDK),或者项目其他位置有手动修改logging配置的代码,可能会覆盖你编写的LOGGING配置,可逐一排查冲突项。
内容的提问来源于stack exchange,提问作者Jason Howard
相关产品推荐
相关产品推荐

