跳转到主要内容

为每个WSGI请求附加一个唯一标识符。

项目描述

request-id

https://img.shields.io/pypi/v/request-id.svg https://img.shields.io/travis/mmerickel/request-id/master.svg

为您的WSGI应用中的每个请求附加一个唯一标识符。

request-id作为WSGI中间件实现。

该软件包将执行以下3件事

  1. 生成一个唯一的request_id标识符,该标识符将被存储在WSGIenviron中,并设置为X-Request-ID响应头。

  2. 使用request_id重命名处理线程,以便任何由记录器输出的日志消息都附加有request_id

  3. 将请求记录到Python stdlib日志库,可用于生成简单的访问日志。

安装

您可以使用pip安装request-id软件包。

$ pip install request-id

使用PasteDeploy进行配置

更新您的应用程序INI,使其在带有request-id过滤器的管道中运行

[app:myapp]
use = egg:myapp

[filter:request-id]
use = egg:request-id
format = {status} {REQUEST_METHOD:<6} {REQUEST_PATH:<60} {REQUEST_ID}

[pipeline:main]
pipeline =
  request-id
  myapp

[loggers]
keys = translogger

[handlers]
keys = translogger

[formatters]
keys = minimal

[logger_translogger]
level = INFO
handlers = translogger
qualname = request_id
propagate = 0

[handler_translogger]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = minimal

[formatter_minimal]
format = %(message)s

在代码中进行配置

创建一个RequestIdMiddleware对象,并将其与您的WSGI应用组合

from request_id import RequestIdMiddleware
from wsgiref.simple_server import make_server

def app(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    yield 'Hello World\n'

app = RequestIdMiddleware(
    app,
    format='{status} {REQUEST_METHOD:<6} {REQUEST_PATH:<60} {REQUEST_ID}',
)

if __name__ == '__main__':
    server = make_server('0.0.0.0', 8080, app)
    server.serve_forever()

访问request_id

request_id存储在请求的environ字典中,可以使用request_id.get_request_id(request)在任何可用位置访问它,其中requestwebob.request.Request的一个实例。

设置

logger_name

将日志输出传递给Python stdlib logger的名称。默认:request_id

logging_level

将请求信息输出到Python stdlib logging级别的名称。默认:INFO

格式

使用PEP-3101字符串格式语法的格式化字符串。可能的选项有

  • REQUEST_ID

  • REMOTE_ADDR

  • REMOTE_USER

  • REQUEST_METHOD

  • REQUEST_URI

  • REQUEST_PATH

  • HTTP_HOST

  • HTTP_VERSION

  • HTTP_REFERER

  • HTTP_USER_AGENT

  • 时间

  • 持续时间

  • 字节

  • 状态

默认:'{REMOTE_ADDR} {HTTP_HOST} {REMOTE_USER} [{时间}] "{REQUEST_METHOD} {REQUEST_URI} {HTTP_VERSION}" {状态} {字节} {持续时间} "{HTTP_REFERER}" "{HTTP_USER_AGENT}" - {REQUEST_ID}

source_header

如果不为None,则将从请求的此头中提取request_id。这在上游系统设置了一个您想在WSGI应用中使用的请求标识符时非常有用。默认:None

exclude_prefixes

一个基于request.path_info的URL路径列表(用空格或换行符分隔),要忽略这些路径。路径应有一个前置的/以便正确匹配。默认:None

致谢

此代码在Paste的translogger middleware上进行了大量借鉴。

1.0.1 (2020-10-06)

  • 修复了一个问题,当WSGI environ中的PATH_INFO在处理请求时被更改时,exclude_prefixes无法匹配。

1.0 (2018-11-26)

  • 修复了exclude_prefixes中在Python 3中只匹配第一次请求的bug。

0.3.1 (2017-11-26)

  • 修复了变更日志。

0.3 (2017-11-26)

  • 当源头缺失时,不要崩溃。相反,将请求ID设置为“-”。

  • 正确格式化{时间}时间戳中的UTC偏移。

  • 增加100%测试覆盖率。

0.2.1 (2016-11-03)

0.2 (2016-08-09)

  • 捕获异常并返回webob.exc.HTTPInternalServerError,以便将request_id附加到响应。

0.1.2 (2016-07-26)

  • 修复了与exclude_prefixes相关的几个bug,并为其添加了一些文档。

0.1.1 (2016-07-26)

  • 添加了一个新设置exclude_prefixes,可以用来避免记录某些请求。

0.1.0 (2016-07-26)

  • 初始发布。

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定要选择哪个,请了解更多关于安装包的信息。

源分布

request-id-1.0.1.tar.gz (8.1 kB 查看哈希值)

上传时间 源代码

构建版本

request_id-1.0.1-py2.py3-none-any.whl (6.2 kB 查看哈希值)

上传时间 Python 2 Python 3

支持