Django中间件和日志过滤器,用于将唯一的ID附加到请求生成的每个日志消息。
项目描述
django-log-request-id
Django中间件和日志过滤器,用于将唯一的ID附加到请求生成的每个日志消息。
作者: Jamie Matthews, @j4mie
示例
DEBUG [33031a43fc244539895fef70c433337e] myproject.apps.myapp.views: Doing something in a view
DEBUG [33031a43fc244539895fef70c433337e] myproject.apps.myapp.forms: The form validated successfully!
DEBUG [33031a43fc244539895fef70c433337e] myproject.apps.myapp.models: Doing some model magic
DEBUG [33031a43fc244539895fef70c433337e] myproject.apps.myapp.views: Redirecting to form success page
为什么?
这样你就可以在grep(或其他搜索方式)一组日志中搜索高流量应用程序的所有与单个请求相关的消息。
如何?
请求ID存储在线程本地中。 通常不认为线程本地是Django应用程序的最佳实践,但在此情况下似乎只有一种可行的方案。欢迎提交更好的想法的拉取请求。
还有其他实用功能吗?
在某些情况下,HTTP堆栈更高层的组件,如负载均衡器或代理,可能会生成请求ID。例如,Heroku的http-request-id功能 将名为 X_REQUEST_ID
的头添加到请求中。如果存在这样的头(并在您的设置中配置,见下文),则将使用该ID(而不是生成一个)。您可以根据需要配置设置以使用生成的ID或在没有可用时返回默认请求_id。
此外,该ID还会添加到传递给您的视图的HttpRequest
对象中(作为request.id
),以便您可以在应用程序中使用它。
安装和用法
首先,安装软件包:pip install django-log-request-id
将中间件添加到您的MIDDLEWARE_CLASSES
设置中。它应该在最上面。
MIDDLEWARE_CLASSES = (
'log_request_id.middleware.RequestIDMiddleware',
# ... other middleware goes here
)
将 log_request_id.filters.RequestIDFilter
添加到您的 LOGGING
设置中。您还需要更新您的 formatters
以包括一个包含新 request_id
变量的格式,添加一个输出消息的处理程序(例如,输出到控制台),最后将处理程序附加到您应用程序的日志记录器。
如果以上内容没有意义,请查阅 Django 日志文档。
以下是一个示例 LOGGING
设置
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'request_id': {
'()': 'log_request_id.filters.RequestIDFilter'
}
},
'formatters': {
'standard': {
'format': '%(levelname)-8s [%(asctime)s] [%(request_id)s] %(name)s: %(message)s'
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'filters': ['request_id'],
'formatter': 'standard',
},
},
'loggers': {
'myapp': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': False,
},
}
}
然后您可以像往常一样输出日志消息
import logging
logger = logging.getLogger(__name__)
logger.debug("A wild log message appears!")
如果您想使用请求头中提供的 ID,请添加以下设置
LOG_REQUEST_ID_HEADER = "HTTP_X_REQUEST_ID"
如上设置此值将启用带有 X-Request-Id
头部的请求以头值进行日志记录。
注意,此值必须符合 Django META 键 的格式,否则将被忽略。
如果您希望当设置了 LOG_REQUEST_ID_HEADER
但请求中没有提供时回退到生成的 ID,请添加以下设置
GENERATE_REQUEST_ID_IF_NOT_IN_HEADER = True
如果您想在响应头中包含请求 ID,请添加以下设置,其中 RESPONSE_HEADER_NAME
是您将要使用的自定义头名称
REQUEST_ID_RESPONSE_HEADER = "RESPONSE_HEADER_NAME"
如果您想更改日志输出中的默认 request_id
,请添加以下设置,其中 none
(默认)是在缺失时的默认值。
NO_REQUEST_ID = "none"
记录所有请求
RequestIDMiddleware
还具有记录应用程序接收到的所有请求的能力,包括一些有用的信息,如用户 ID(如果存在)。要启用此功能,请将 LOG_REQUESTS = True
添加到您的设置中。消息被发送到 log_request_id.middleware
日志记录器,级别为 INFO
。
记录其他用户属性
如果您想记录用户 ID 而不是其他用户属性,可以使用 LOG_USER_ATTRIBUTE
设置。例如,要记录用户名,使用:LOG_USER_ATTRIBUTE = "username"
。如果此设置设置为 None
,则不会记录任何用户属性。
许可证
版权所有 © 2012,DabApps。
保留所有权利。
重新分发和使用源代码和二进制代码,无论是否修改,只要满足以下条件
源代码的重新分发必须保留上述版权声明、本条件列表和以下免责声明。二进制形式的重新分发必须在文档和/或其他与分发一起提供的材料中复制上述版权声明、本条件列表和以下免责声明。本软件由版权所有者和贡献者提供,“现状”且不提供任何明示或暗示的保证,包括但不限于适销性和适用于特定目的的保证。在任何情况下,版权所有者或贡献者均不对任何直接、间接、偶然、特殊、示范性或后果性的损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论是否已通知此类损害的可能性,无论损害是基于合同、严格责任还是侵权(包括疏忽或不计后果)。
行为准则
有关向此存储库贡献时的行为准则指南,请参阅 https://www.dabapps.com/open-source/code-of-conduct/
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。
源分发
构建分发
哈希值 for django_log_request_id-2.1.0-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c0793c030cfe9f673eff3f89667711f65c39509c016d85e436f9d48507ee778c |
|
MD5 | a9f42709ceb08d7db99d60961cd7f506 |
|
BLAKE2b-256 | 571b2bbd1f4a0ce210d6543c1dafed9735808237fbab7d785d1239a19ade3f15 |