将唯一标识符附加到每个wsgi请求。
request-id的Python项目详细描述
请求ID
将唯一标识符附加到wsgi应用程序中的每个请求。
request-id作为wsgi中间件实现。
该软件包将执行3项操作:
- 生成唯一的request_id标识符,该标识符将存储在 wsgienviron并设置为X-Request-ID响应头。
- 用request_id重命名处理线程,以便任何日志 记录器输出的消息附加了request_id。
- 将请求记录到python stdlib日志库,可以使用 生成一个简单的访问日志。
安装
您可以使用pip:
$ pip install request-id
使用pastedeploy配置
使用^{tt1}更新应用程序ini以在管道中运行$ 过滤器:
[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组合在一起 应用程序:
fromrequest_idimportRequestIdMiddlewarefromwsgiref.simple_serverimportmake_serverdefapp(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()
访问请求ID
request_id存储在请求environ字典中,可以 从任何可用的位置访问 request_id.get_request_id(request),其中request是 webob.request.Request。
设置
- logger_name
- 日志输出将指向的python stdlib记录器的名称 交付。默认值:request_id
- logging_level
- 请求信息所在的python stdlib日志记录级别的名称 将输出。默认值:INFO
- format
使用PEP-3101字符串格式语法格式化字符串。可能的 选项包括:
- REQUEST_ID
- REMOTE_ADDR
- REMOTE_USER
- REQUEST_METHOD
- REQUEST_URI
- REQUEST_PATH
- HTTP_HOST
- HTTP_VERSION
- HTTP_REFERER
- HTTP_USER_AGENT
- time
- duration
- bytes
- status
默认值:'{REMOTE_ADDR} {HTTP_HOST} {REMOTE_USER} [{time}] "{REQUEST_METHOD} {REQUEST_URI} {HTTP_VERSION}" {status} {bytes} {duration} "{HTTP_REFERER}" "{HTTP_USER_AGENT}" - {REQUEST_ID}
- source_header
- 如果不是None,则request_id将从此头中提取 在请求中。如果另一个上游系统正在设置 要在wsgi应用程序中使用的请求标识符。 默认值:None
- exclude_prefixes
- 根据 request.path_info。为了匹配,路径应该有一个前导/。 是的。默认值:None
确认
此代码主要基于Paste中的translogger中间件。
1.0(2018-11-26)
- 修复exclude_prefixes中只匹配第一个请求的错误 在Python3上。
0.3.1(2017-11-26)
- 修复更改日志。
0.3(2017-11-26)
- 当源头丢失时不要崩溃。而是设置请求ID 至“-”。
- 在{time}timestamp中正确格式化UTC偏移量。
- 增加100%的测试覆盖率。
0.2.1(2016-11-03)
- 修复python 3上的logging_level选项。 见https://github.com/mmerickel/request-id/pull/2
0.2(2016-08-09)
- 捕获异常并返回webob.exc.HTTPInternalServerErrorso 可以将request_id附加到响应。
0.1.2(2016-07-26)
- 用exclude_prefixes修复几个错误并为其添加一些文档。
0.1.1(2016-07-26)
- 添加一个新设置exclude_prefixes,可用于避免 记录某些请求。
0.1.0(2016-07-26)
- 初次发布。