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

如何修改DjangoRestFramework默认请求日志格式为指定JSON结构

Django 默认请求日志修改为JSON格式配置方法

你看到的默认请求日志是Django开发服务器内置的ServerFormatter生成的,不需要修改业务代码,只需要调整settings.py中的日志配置即可实现目标格式。

具体操作步骤

  • 打开项目下的settings.py文件,在文件头部添加依赖导入和自定义JSON格式化类:
import logging
import json

class JsonRequestFormatter(logging.Formatter):
    def format(self, record):
        # 提取django.server日志传入的固定参数:请求方法、请求路径、HTTP版本、状态码、响应体大小
        api_method, api_endpoint, _, api_status, _ = record.args
        log_content = {
            "api_method": api_method,
            "api_endpoint": api_endpoint,
            "api_status": api_status
        }
        # 如果需要保留示例中的外层单引号,把下一行替换为 return f"'{json.dumps(log_content, ensure_ascii=False)}'"
        return json.dumps(log_content, ensure_ascii=False)
  • 在settings.py中添加/覆盖LOGGING配置,替换django.server默认的日志处理器和格式化器:
LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        "json_request_formatter": {
            "()": JsonRequestFormatter,
        },
    },
    "handlers": {
        "console": {
            "class": "logging.StreamHandler",
            "formatter": "json_request_formatter",
        },
    },
    "loggers": {
        "django.server": {
            "handlers": ["console"],
            "level": "INFO",
            "propagate": False, # 必须配置,避免日志重复打印
        },
    }
}

注意事项

  • 配置完成后重启runserver开发服务即可生效,请求日志会输出为目标结构化JSON格式
  • 以上配置仅对Django自带的runserver开发服务器生效,如果是生产环境使用gunicorn、uwsgi等服务部署,需要对应调整部署服务本身的访问日志规则
  • 如果需要新增请求ID、响应耗时、用户标识等额外字段,直接在JsonRequestFormatter的format方法中扩展log_content字典即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:18:33