跳转到主要内容

通过在项目日志中注入唯一ID,启用单次请求-响应周期跟踪的中件间

项目描述

Django GUID

https://img.shields.io/pypi/v/django-guid.svg https://img.shields.io/badge/python-3.6+-blue.svg https://img.shields.io/badge/django-2.2%20|%203.0%20|%203.1%20-blue.svg https://img.shields.io/badge/ASGI-supported-brightgreen.svg https://img.shields.io/badge/WSGI-supported-brightgreen.svg https://readthedocs.org/projects/django-guid/badge/?version=latest https://codecov.io/gh/snok/django-guid/branch/master/graph/badge.svg https://img.shields.io/badge/code%20style-black-000000.svg https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white

Django GUID 为每个请求的所有日志输出附加一个唯一的关联ID/请求ID。换句话说,现在所有与请求相关的日志都附加了一个唯一的ID,使得调试变得简单。

你应该使用哪个版本的 Django GUID 取决于你的 Django 版本以及你是否运行 ASGIWSGI 服务器。要确定你应该使用哪个 Django-GUID 版本,请参阅下表。

Django 版本

Django-GUID 版本

3.1.1 或更高版本

3.x.x - ASGI 和 WSGI

3.0.0 - 3.1.0

2.x.x - 仅 WSGI

2.2.x

2.x.x - 仅 WSGI

Django GUID >= 3.0.0 使用 ContextVar 来存储和访问 GUID。之前的版本将 GUID 存储到对象中,可以通过使用当前线程的 ID 来访问。 (Django GUID 的版本 2 一直支持到 Django2.2 LTS 已通过。)


资源:


示例

带有 GUID 的日志输出

INFO ... [773fa6885e03493498077a273d1b7f2d] project.views This is a DRF view log, and should have a GUID.
WARNING ... [773fa6885e03493498077a273d1b7f2d] project.services.file Some warning in a function
INFO ... [0d1c3919e46e4cd2b2f4ac9a187a8ea1] project.views This is a DRF view log, and should have a GUID.
INFO ... [99d44111e9174c5a9494275aa7f28858] project.views This is a DRF view log, and should have a GUID.
WARNING ... [0d1c3919e46e4cd2b2f4ac9a187a8ea1] project.services.file Some warning in a function
WARNING ... [99d44111e9174c5a9494275aa7f28858] project.services.file Some warning in a function

不带 GUID 的日志输出

INFO ... project.views This is a DRF view log, and should have a GUID.
WARNING ... project.services.file Some warning in a function
INFO ... project.views This is a DRF view log, and should have a GUID.
INFO ... project.views This is a DRF view log, and should have a GUID.
WARNING ... project.services.file Some warning in a function
WARNING ... project.services.file Some warning in a function

有关更多示例,请参阅 文档

安装

使用 pip 进行安装

pip install django-guid

设置

包设置添加到你的 settings.py

DJANGO_GUID = {
    'GUID_HEADER_NAME': 'Correlation-ID',
    'VALIDATE_GUID': True,
    'RETURN_HEADER': True,
    'EXPOSE_HEADER': True,
    'INTEGRATIONS': [],
    'IGNORE_URLS': [],
    'UUID_LENGTH': 32,
}

可选参数

  • GUID_HEADER_NAME

    在传入请求的标题中查找 GUID 的名称。请记住,它是大小写不敏感的。

    默认值:Correlation-ID

  • VALIDATE_GUID

    是否应该验证 GUID_HEADER_NAME。如果通过标题发送的 GUID 不是一个有效的 GUID (uuid.uuid4)。

    默认值:True

  • RETURN_HEADER

    是否将 GUID (Correlation-ID) 作为响应中的标题返回。它的名称将与 GUID_HEADER_NAME 设置相同。

    默认值:True

  • EXPOSE_HEADER

    如果 RETURN_HEADERTrue,则返回 Access-Control-Expose-Headers 用于 GUID 标题。如果 RETURN_HEADERFalse,则没有影响。这允许在启用 CORS 时,JavaScript Fetch API 访问标题。

    默认值:True

  • 集成

    是否启用任何自定义或可用的与 django_guid 的集成。例如,使用 SentryIntegration() 作为集成会将 Sentry 的 transaction_id 设置为与中间件使用的 GUID 相匹配。

    默认值:[]

  • IGNORE_URLS

    禁用中间件的路由端点。您可以将您的健康检查端点放在这里。

    默认值:[]

  • UUID_LENGTH

    让您可以选择剪短包生成的 UUID 的长度。

    默认值:32

配置

设置完成后,将以下内容添加到项目的 settings.py

1. 安装的应用

django_guid 添加到您的 INSTALLED_APPS

INSTALLED_APPS = [
    ...
    'django_guid',
]

2. 中间件

django_guid.middleware.guid_middleware 添加到您的 MIDDLEWARE

MIDDLEWARE = [
    'django_guid.middleware.guid_middleware',
    ...
 ]

建议您将中间件添加到顶部,以便剩余的中间件记录器包括请求的 GUID。

3. 记录配置

django_guid.log_filters.CorrelationId 添加为过滤器到您的 LOGGING 配置

LOGGING = {
    ...
    'filters': {
        'correlation_id': {
            '()': 'django_guid.log_filters.CorrelationId'
        }
    }
}

将此过滤器放入您的处理程序

LOGGING = {
    ...
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'medium',
            'filters': ['correlation_id'],
        }
    }
}

请务必将新的 correlation_id 过滤器添加到您的格式化程序之一或全部。

LOGGING = {
    ...
    'formatters': {
        'medium': {
            'format': '%(levelname)s %(asctime)s [%(correlation_id)s] %(name)s %(message)s'
        }
    }
}

如果这些设置让您感到困惑,请查看演示项目的 settings.py 文件以获取完整示例。

4. Django GUID 日志记录器(可选)

如果您想查看 Django GUID 中间件的输出,可以为该模块配置一个日志记录器。只需将 django_guid 添加到项目的日志记录器中,如下例所示

LOGGING = {
    ...
    'loggers': {
        'django_guid': {
            'handlers': ['console', 'logstash'],
            'level': 'WARNING',
            'propagate': False,
        }
    }
}

当实现此包时,这特别有用,如果您计划将现有 GUID 传递给中间件,因为配置错误的 GUID 不会引发异常,但会生成警告日志。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

django_guid-3.5.0.tar.gz (14.1 kB 查看哈希值)

上传时间

构建分布

django_guid-3.5.0-py3-none-any.whl (19.7 kB 查看哈希值)

上传时间 Python 3

由以下支持