You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django日志配置问题:ERROR级日志无法写入debug.log文件排查

Django日志配置问题排查

核心故障点

  • 未明确配置django.request、django.security等Django内置子logger的传播规则:Django运行时的请求异常、500错误、安全类告警都会输出到这两类子logger,虽然默认日志传播属性为True,但部分部署容器(Gunicorn、uWSGI等)会默认关闭这类子logger的传播,导致错误日志无法传递到django根logger的file handler。
  • file handler配置不全:未指定日志格式化器与文件编码,部分环境下无格式化器会导致日志写入失败,中文日志也会因为编码问题无法写入文件。
  • 未覆盖全局异常日志:Python解释器层面的未捕获异常不会进入Django的django.*日志体系,没有专门配置捕获这部分日志的规则。
  • 若你提到的是Django启动阶段的语法/编译错误,这类错误在Django日志体系初始化前抛出,无法被该配置捕获,需要查看部署容器的自身日志输出。

修复后的完整LOGGING配置

LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "filters": {
        "require_debug_false": {"()": "django.utils.log.RequireDebugFalse"},
        "require_debug_true": {"()": "django.utils.log.RequireDebugTrue"},
    },
    "formatters": {
        "django.server": {
            "()": "django.utils.log.ServerFormatter",
            "format": "[{server_time}] {message}",
            "style": "{",
        },
        # 新增普通日志格式化器
        "standard": {
            "format": "[{asctime}] [{levelname}] [{module}] {message}",
            "style": "{",
            "datefmt": "%Y-%m-%d %H:%M:%S"
        }
    },
    "handlers": {
        "console": {
            "level": "INFO",
            "filters": ["require_debug_true"],
            "class": "logging.StreamHandler",
            "formatter": "standard"
        },
        "file": {
            "level": "ERROR",
            "filters": ["require_debug_false"],
            "class": "logging.FileHandler",
            "filename": BASE_DIR / "debug.log",
            "formatter": "standard",
            "encoding": "utf-8" # 解决中文日志乱码问题
        },
        "django.server": {
            "level": "INFO",
            "class": "logging.StreamHandler",
            "formatter": "django.server",
        },
        "mail_admins": {
            "level": "ERROR",
            "filters": ["require_debug_false"],
            "class": "django.utils.log.AdminEmailHandler",
        },
    },
    "loggers": {
        "django": {
            "handlers": ["file", "console"],
            "level": "INFO",
            "propagate": True # 明确开启日志传播
        },
        # 明确配置请求异常logger
        "django.request": {
            "handlers": ["file"],
            "level": "ERROR",
            "propagate": True
        },
        # 明确配置安全类日志logger
        "django.security": {
            "handlers": ["file"],
            "level": "ERROR",
            "propagate": True
        },
        "django.server": {
            "handlers": ["django.server"],
            "level": "INFO",
            "propagate": False,
        },
        # 捕获全局未分类异常
        "": {
            "handlers": ["file"],
            "level": "ERROR",
            "propagate": True
        }
    },
}

验证方式

  • 生产环境DEBUG=False状态下,手动构造一个500错误接口,访问后查看debug.log是否有对应错误堆栈
  • 检查日志文件的写入权限,确保运行Django进程的系统用户对debug.log有写入权限

内容的提问来源于stack exchange,提问作者TropicalRaisel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:57:04