通过在项目日志中注入唯一ID,启用单次请求-响应周期跟踪的中件间
项目描述
Django GUID
Django GUID 为每个请求的所有日志输出附加一个唯一的关联ID/请求ID。换句话说,现在所有与请求相关的日志都附加了一个唯一的ID,使得调试变得简单。
你应该使用哪个版本的 Django GUID 取决于你的 Django 版本以及你是否运行 ASGI 或 WSGI 服务器。要确定你应该使用哪个 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 已通过。)
资源:
免费软件:BSD 许可证
示例
带有 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_HEADER
为True
,则返回Access-Control-Expose-Headers
用于 GUID 标题。如果RETURN_HEADER
为False
,则没有影响。这允许在启用 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 不会引发异常,但会生成警告日志。
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。