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

django.server日志器功能解析及API请求日志配置相关疑问

关于Django日志器django.server的功能及API请求日志配置解答

嘿,我来帮你把这些关于Django日志的疑问掰扯清楚:

一、django.server的实际作用到底是什么?

一句话总结:它只服务于你用python manage.py runserver启动的开发服务器,生产环境里用的Gunicorn、uWSGI这类WSGI服务器完全不会用到它。

具体来说,它会记录开发服务器接收到的每一个请求的处理信息:

  • 正常的请求(非4XX/5XX状态码)会以INFO级别输出,内容包含请求方法、URL路径、响应状态码、处理时长
  • 4XX类响应(比如404找不到资源、403权限不足)会以WARNING级别记录
  • 5XX类服务器错误会以ERROR级别记录

你之前禁用它但日志没变化,大概率是因为你的项目不是用runserver启动的——生产环境下这个日志器本来就不会工作,所以禁用它自然看不到任何效果~

二、仅用django根日志器能满足记录API请求的需求吗?

绝对不行!django是所有Django子日志器的根节点,它会接收所有子日志器(比如django.db、django.admin、django.request等)的日志内容,范围太宽泛了,会把ORM操作、后台管理操作这些你不需要的日志也一起打出来,根本做不到只精准记录API请求。

三、怎么配置只记录所有API请求的日志器?

分两种场景来配置:

1. 开发环境(用runserver启动)

直接单独启用django.server,同时禁用其他请求相关的日志器,避免重复记录:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.server': {
            'handlers': ['console'],
            'level': 'INFO',
            'propagate': False,  # 不让日志往上传给根日志器
        },
        # 禁用django.request,避免重复打请求日志
        'django.request': {
            'handlers': [],
            'propagate': False,
        },
    },
}

2. 生产环境(用WSGI服务器)

生产环境下django.server完全没用,得靠django.request来记录请求,还可以加个过滤器只保留API路径的请求:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        # 自定义过滤器,只保留路径以/api/开头的请求
        'api_only': {
            '()': 'django.utils.log.CallbackFilter',
            'callback': lambda record: record.path.startswith('/api/')
        }
    },
    'handlers': {
        'api_log_file': {
            'class': 'logging.FileHandler',
            'filename': '/var/log/django/api_requests.log',  # 换成你的日志路径
        },
    },
    'loggers': {
        'django.request': {
            'handlers': ['api_log_file'],
            'level': 'INFO',
            'filters': ['api_only'],
            'propagate': False,
        },
        # 生产环境直接禁用django.server就行
        'django.server': {
            'handlers': [],
            'propagate': False,
        },
    },
}

额外提醒:官方文档说过,被记录到django.security的请求不会被django.request记录,如果你的API涉及安全相关的请求(比如CSRF验证失败),需要单独配置django.security日志器来捕获这些内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:42:47