将唯一标识符附加到每个wsgi请求。

request-id的Python项目详细描述


请求ID

https://img.shields.io/pypi/v/request-id.svghttps://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:

$ 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),其中requestwebob.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)

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)

  • 初次发布。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JavaFX TableView更新单元格,不更新对象值   在扫描器中使用分隔符的java   java OkHttp 4.9.2,连接无法重用,导致端口耗尽   eclipse中的c JNI:运行Java代码   java是否在出厂的所有硬件设备中都有/mnt/sdcard/Android/data文件夹(或等效文件夹)?   Java,在eclipse中访问资源文件夹中的图像   java为什么Bluemix dashDB操作抛出SqlSyntaxErrorException,SQLCODE=1667?   JavaHtmlUnitWebClient。getPage不处理javascript   Google API认证的java问题   java如何将JSON数组反序列化为Apache beam PCollection<javaObject>   ServerSocket停止接收命令,java/安卓   来自Java类的安卓 Toast消息   java如何自动重新加载应用程序引擎开发服务器?   java是否可以尝试/捕获一些东西来检查是否抛出了异常?   java如何做到这一点当我按下load game时,它不仅会加载信息,还会将您带到游戏中?   Java选项Xmx代表什么?   Java映射,它在插入时打印值   设置“ulimit c unlimited”后,java无法生成系统核心转储