如何修改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
相关产品推荐
相关产品推荐

