A Django middleware for comprehensive HTTP request logging
Project description
Bruce Django Requests Logger
一个功能完整的 Django 中间件,用于详细记录 HTTP 请求信息。
功能特性
- 📝 记录完整的请求信息(方法、路径、状态码、持续时间等)
- 🕒 高精度时间测量和格式化显示
- 🌐 客户端 IP 地址检测(支持代理)
- 🔍 可配置的请求过滤(排除静态文件等)
- 🛠 管理命令查看日志统计
- 📊 JSON 格式的结构化日志输出
- ⚡ 轻量级,对性能影响极小
安装
使用 pip 安装
pip install bruce-django-requests-logger
使用方法
- 添加到 INSTALLED_APPS
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 其他应用...
# 添加 Bruce Django Requests Logger
'bruce_django_requests_logger',
]
2.添加中间件
# settings.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
# 其他中间件...
# 添加 Bruce Requests Logger 中间件
# 建议放在其他中间件之前,以便准确测量整个请求处理时间
'bruce_django_requests_logger.middleware.BruceRequestsLoggerMiddleware',
]
- 基本使用 配置完成后,中间件会自动记录所有请求。启动 Django 开发服务器:
python manage.py runserver
访问您的 Django 应用任意页面,查看控制台输出,您将看到格式化的请求信息:
[BRUCE_REQUESTS_LOGGER] {
"timestamp": "2024-01-01T10:00:00+08:00",
"method": "GET",
"path": "/admin/",
"query_string": "",
"status_code": 200,
"duration": 0.145,
"duration_formatted": "145ms",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"ip_address": "172.18.0.1",
"content_type": "text/html; charset=utf-8",
"content_length": "12345"
}
- 使用管理命令
# 查看最近的10条请求日志(默认)
python manage.py view_logs
# 查看最近5条GET请求
python manage.py view_logs --limit 5 --method GET
# 查看状态码为404的请求
python manage.py view_logs --status 404
# 查看最近20条日志
python manage.py view_logs --limit 20
日志字段说明
| 字段名 | 说明 | 示例 |
|---|---|---|
| timestamp | 请求时间戳(ISO 8601 格式) | "2024-01-01T10:00:00+08:00" |
| method | HTTP 方法 | "GET", "POST", "PUT", "DELETE" |
| path | 请求路径 | "/admin/", "/api/users/" |
| query_string | URL 查询参数 | "page=1&size=20" |
| status_code | HTTP 状态码 | 200, 404, 500 |
| duration | 请求处理时间(秒) | 0.145 |
| duration_formatted | 格式化后的处理时间 | "145ms" |
| user_agent | 客户端用户代理 | "Mozilla/5.0..." |
| ip_address | 客户端 IP 地址 | "172.18.0.1" |
| content_type | 响应内容类型 | "text/html; charset=utf-8" |
| content_length | 响应内容长度 | "12345" |
高级配置
自定义日志输出
您可以创建自定义中间件类来扩展或修改日志行为:
# your_app/middleware.py
from bruce_django_requests_logger.middleware import BruceRequestsLoggerMiddleware
class CustomRequestsLogger(BruceRequestsLoggerMiddleware):
def _log_request(self, log_entry):
# 自定义日志输出,例如写入文件或发送到日志服务
custom_log = f"CUSTOM: {log_entry['method']} {log_entry['path']} - {log_entry['duration_formatted']}"
print(custom_log)
# 同时保留原始日志输出
super()._log_request(log_entry)
然后在 settings.py 中使用您的自定义类:
MIDDLEWARE = [
# ...
'your_app.middleware.CustomRequestsLogger', # 使用自定义中间件
]
排除特定路径
如果您希望排除某些路径的日志记录,可以创建自定义的请求检查函数:
# your_app/utils.py
from bruce_django_requests_logger.utils import should_log_request
def custom_should_log_request(request):
# 排除健康检查路径和管理后台静态文件
excluded_paths = ['/health/', '/admin/static/']
for path in excluded_paths:
if request.path.startswith(path):
return False
return should_log_request(request)
生产环境配置
在生产环境中,建议将日志输出重定向到文件:
# settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'INFO',
'class': 'logging.FileHandler',
'filename': '/var/log/django/requests.log',
'formatter': 'verbose',
},
},
'formatters': {
'verbose': {
'format': '{name} {levelname} {asctime} {message}',
'style': '{',
},
},
'loggers': {
'bruce_django_requests_logger': {
'handlers': ['file'],
'level': 'INFO',
'propagate': True,
},
},
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bruce_django_requests_logger-0.1.1.tar.gz.
File metadata
- Download URL: bruce_django_requests_logger-0.1.1.tar.gz
- Upload date:
- Size: 12.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a3be04e6b69a6a1b75e5f3622f3df9b67935f760ed3561e53322cb2e350f245
|
|
| MD5 |
9aa1db4b103411c95d7b76745a6d496f
|
|
| BLAKE2b-256 |
12f5c087866d3b6dc8a305f10581d4d3b333569763792665321cb871dbba0ddb
|
File details
Details for the file bruce_django_requests_logger-0.1.1-py3-none-any.whl.
File metadata
- Download URL: bruce_django_requests_logger-0.1.1-py3-none-any.whl
- Upload date:
- Size: 12.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3332fcaac40b18d05cd23cbf1bb1cfd38bd6b9f828aa5d8334097db019c5deaf
|
|
| MD5 |
9611157b3561eeebd9774c16e9d1715e
|
|
| BLAKE2b-256 |
d0ae850cda5b020cc214d395273aecd89e46def3d6eb4e13d4a4fd1fe9943179
|