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

如何在Django+Gunicorn应用的标准输出中打印请求用户信息

Django + Gunicorn 日志追加用户信息实现方案

需求说明

当前应用日志输出格式:

[03.10.2022 19:43:14] INFO [django.request:middleware] GET /analyse/v2/ping - 200

需要实现:

  • 已授权请求:在状态码后追加显示用户用户名/邮箱,示例:

[03.10.2022 19:43:14] INFO [django.request:middleware] GET /analyse/v2/ping - 200 - useremail@outlook.com

  • 未授权请求:在状态码后显示UNAUTHORIZED,示例:

[03.10.2022 19:43:14] INFO [django.request:middleware] GET /analyse/v2/ping - 200 - UNAUTHORIZED

实现步骤

在Django项目的settings.py中添加以下配置:

1. 定义日志过滤器回调函数

该函数用于从请求中提取用户信息,无有效用户时标记为未授权:

def add_username(record):
    try:
        # 若需显示邮箱,替换为 record.request.user.email
        username = record.request.user.username
    except AttributeError:
        username = "UNAUTHORIZED"
    record.username = username
    return True

2. 配置LOGGING字典

将过滤器绑定到日志处理器,调整输出格式以匹配需求:

LOGGING = {
    "version": 1,
    "disable_existing_loggers": True,
    "root": {"level": "WARNING", "handlers": ["console"]},
    "formatters": {
        "verbose": {
            "format": "[%(asctime)s] %(levelname)s [%(name)s:%(module)s] %(message)s - %(username)s",
            "datefmt": "%d.%m.%Y %H:%M:%S",
        },
        "simple": {"format": "%(levelname)s %(message)s"},
    },
    "filters": {
        "add_username": {
            "()": "django.utils.log.CallbackFilter",
            "callback": add_username,
        }
    },
    "handlers": {
        "console": {
            "level": "DEBUG",
            "class": "logging.StreamHandler",
            "formatter": "verbose",
            "filters": ["add_username"],
        },
        # 可按需添加文件处理器等其他日志输出方式
    },
    "loggers": {
        "django.request": {
            "handlers": ["console"],
            "level": "INFO",
            "propagate": False,
        },
        # 可给其他需要的日志器绑定该过滤器
    }
}

注意事项

  • Gunicorn会直接复用Django的日志配置,启动时无需额外修改Gunicorn日志参数
  • 确保日志记录的record对象包含request属性(Django的django.request日志器默认会携带)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:05:13