为每个WSGI请求附加一个唯一标识符。
项目描述
request-id
为您的WSGI应用中的每个请求附加一个唯一标识符。
request-id作为WSGI中间件实现。
该软件包将执行以下3件事
生成一个唯一的request_id标识符,该标识符将被存储在WSGIenviron中,并设置为X-Request-ID响应头。
使用request_id重命名处理线程,以便任何由记录器输出的日志消息都附加有request_id。
将请求记录到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)在任何可用位置访问它,其中request是webob.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)
修复Python 3上的logging_level选项。请参阅https://github.com/mmerickel/request-id/pull/2
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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4adf1dc880085571454667ee4dba36a12b720eea5dbbfbbbd840c5a24268b4f7 |
|
MD5 | abf0125561fb38198893ba4b46c5ce28 |
|
BLAKE2b-256 | 9bb330617b85b1766b6a804f2b8abc0ca7496f6349236f7eec28cb42687ca8e3 |
request_id-1.0.1-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5956563a55d8525c5128470766af0fa42d4aff4a9c808522fadd6f42925e5606 |
|
MD5 | f5b65a69c70d51cacab9fb7ec1dff1bc |
|
BLAKE2b-256 | 53d915231ddd0372b142b380d5277d7c030de04e734b065ef67c6a6d1a4c1d67 |