Skip to main content

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

使用方法

  1. 添加到 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',
]
  1. 基本使用 配置完成后,中间件会自动记录所有请求。启动 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"
}
  1. 使用管理命令
# 查看最近的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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bruce_django_requests_logger-0.1.1.tar.gz (12.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bruce_django_requests_logger-0.1.1-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

File details

Details for the file bruce_django_requests_logger-0.1.1.tar.gz.

File metadata

File hashes

Hashes for bruce_django_requests_logger-0.1.1.tar.gz
Algorithm Hash digest
SHA256 4a3be04e6b69a6a1b75e5f3622f3df9b67935f760ed3561e53322cb2e350f245
MD5 9aa1db4b103411c95d7b76745a6d496f
BLAKE2b-256 12f5c087866d3b6dc8a305f10581d4d3b333569763792665321cb871dbba0ddb

See more details on using hashes here.

File details

Details for the file bruce_django_requests_logger-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for bruce_django_requests_logger-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3332fcaac40b18d05cd23cbf1bb1cfd38bd6b9f828aa5d8334097db019c5deaf
MD5 9611157b3561eeebd9774c16e9d1715e
BLAKE2b-256 d0ae850cda5b020cc214d395273aecd89e46def3d6eb4e13d4a4fd1fe9943179

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page