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

Gunicorn未记录HTTP请求问题:配置及与Django日志对比

解决Gunicorn运行Django时不输出HTTP请求日志的问题

我来帮你搞定这个问题!当用Gunicorn替代Django自带的runserver时,默认确实不会输出和runserver一模一样的GET/POST请求日志——这是因为两者的日志体系是分开的,下面给你两种可行的解决方案:

方案1:自定义Gunicorn的Access日志格式

你已经在启动命令里加了--access-logfile=-(把日志输出到控制台),但默认的日志格式和Django runserver的不一样。可以通过自定义格式让它输出接近的内容:

方式A:在启动命令中添加参数

直接修改你的启动命令,加上日志格式参数:

$VIRT_ENV/gunicorn -c config.py utrade.wsgi:application \
  --log-level=debug \
  --timeout=0 \
  --access-logfile=- \
  --log-file=- \
  --access-logformat='%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s'

这个格式会输出类似这样的日志:

127.0.0.1 - - [10/Oct/2024:14:32:00 +0000] "GET / HTTP/1.1" 302 0

方式B:在Gunicorn的config.py中配置

如果习惯用配置文件管理,在config.py里添加以下内容:

accesslog = '-'  # 输出到stdout
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s'

方案2:让Django自己输出请求日志

Django runserver的请求日志来自django.server这个日志器,在Gunicorn环境下它默认不会激活,你可以修改Django项目的settings.py中的LOGGING配置来开启它:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.server': {
            'handlers': ['console'],
            'level': 'INFO',
            'propagate': False,
        },
    },
}

配置后就能看到和runserver完全一样的日志输出了,比如:

INFO:django.server:"GET / HTTP/1.1" 302 0
INFO:django.server:"GET /login/?next=/ HTTP/1.1" 200 5676

注意事项

  • 两种方案选一种即可,同时开启会导致请求日志重复输出。
  • Gunicorn的access日志和Django的django.server日志侧重点不同:前者更偏向WSGI层面的请求记录,后者是Django框架内部的请求日志,你可以根据需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:17:13