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

DEBUG=False时Docker容器中Gunicorn运行Django无日志输出问题

问题描述

将Django应用容器化部署至Kubernetes,使用Kubernetes负载均衡器无需Nginx,已编写如下Dockerfile:

FROM python:3.11-alpine

WORKDIR /usr/src/app

COPY requirements.txt ./

RUN apk add musl-dev mariadb-dev gcc
RUN pip install --no-cache-dir -r requirements.txt
COPY . .

RUN python manage.py collectstatic

CMD ["gunicorn"  , "--bind", "0.0.0.0:8000", "app.wsgi"]

设置DEBUG = False后,运行容器仅能看到Gunicorn启动日志:

datetime [datetime] [1] [INFO] Starting gunicorn 20.1.0
datetime [datetime] [1] [INFO] Listening at: http://0.0.0.0:80 (1)
datetime [datetime] [1] [INFO] Using worker: sync
datetime [datetime] [1] [INFO] Booting worker with pid: 7

已配置默认日志:

LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "handlers": {
        "console": {
            "class": "logging.StreamHandler",
        },
    },
    "root": {
        "handlers": ["console"],
        "level": "INFO",
    },
}

但无法看到Django的访问、错误等日志,需补充哪些配置?

解决方案
  • 修改Gunicorn启动参数,转发请求/错误日志到标准输出
    Gunicorn默认不会将请求日志传递给Django,需要显式指定日志输出位置。更新Dockerfile中的CMD:
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--access-logfile", "-", "--error-logfile", "-", "app.wsgi"]

其中-表示将日志输出到stdout,和Django的console handler输出一致,方便容器日志统一收集。

  • 补充Django特定日志器配置
    默认root日志器可能未覆盖Django内置的请求/错误日志源,需要在LOGGING配置中添加针对django.request和django.server的日志规则:
LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "handlers": {
        "console": {
            "class": "logging.StreamHandler",
        },
    },
    "root": {
        "handlers": ["console"],
        "level": "INFO",
    },
    "loggers": {
        # 记录请求错误(如404、500)
        "django.request": {
            "handlers": ["console"],
            "level": "INFO",
            "propagate": False,
        },
        # 记录服务端请求日志(若使用Gunicorn,主要依赖Gunicorn的access-log)
        "django.server": {
            "handlers": ["console"],
            "level": "INFO",
            "propagate": False,
        },
    },
}
  • propagate: False避免日志被重复输出到root日志器

  • 若需要更详细日志,可将level改为DEBUG,生产环境建议保持INFO或WARNING

  • 验证日志输出
    重新构建镜像并部署到Kubernetes后,使用kubectl logs <你的Pod名称>查看容器日志,即可看到Django的错误日志和Gunicorn转发的请求日志。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:05:27