gpt4 book ai didi

python - 为 Tornado 日志条目传递额外的上下文

转载 作者:行者123 更新时间:2023-12-04 17:52:11 29 4
gpt4 key购买 nike

我们的日志格式化程序有一个用户定义的参数。它被定义为:

'%(asctime)s|%(levelname)s|%(name)s|REQID:%(req_id)s|%(module)s:%(lineno)s|%(message)s'

其中 req_id 是请求 ID,由应用程序代码为每个请求生成。当我们处理请求时,在我们的应用程序代码中,我们可以访问此 req_id,并将其用于记录目的,如下所示:

logger = logging.LoggerAdapter(logging.getLogger(service_name), {'req_id': req_id})
logger.debug('A debug message')

我试图让 tornado 记录器符合我们的日志格式,但由于 tornado 无法访问我们的应用程序级别 req_id 它失败了:

KeyError: 'req_id'

我如何告诉 tornado 使用 LoggerAdapter 用于 tornado.access,以及用户提供的上下文?

编辑

作为解决方法,我尝试了以下方法:

Since it is not possible for me to tell tornado what loggers to use, I managed to hack my way around this limitation by reconfiguring the tornado logger in each request, adding the contextual information using a logging filter.

不幸的是,为每个请求重新配置日志是行不通的,因为 tornado 将并行处理请求,我们将得到一个不一致的状态。

那么我们如何为 Tornado 记录器传递用户上下文?

最佳答案

可以通过覆盖 Application.log_request 来控制 tornado.access 日志在子类中或使用 log_function 应用程序设置。此方法默认写入 tornado.access 日志,但您可以覆盖它以根据需要进行记录。

但是请注意,tornado.generaltornado.application 记录器不能以这种方式覆盖,因此您的日志格式化程序/过滤器必须仍然能够处理消息没有 req_id 字段。

关于python - 为 Tornado 日志条目传递额外的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43787183/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com