Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为tornado日志条目传递额外上下文_Python_Logging_Tornado - Fatal编程技术网

Python 为tornado日志条目传递额外上下文

Python 为tornado日志条目传递额外上下文,python,logging,tornado,Python,Logging,Tornado,我们的日志格式化程序有一个用户定义的参数。其定义如下: '%(asctime)s|%(levelname)s|%(name)s|REQID:%(req_id)s|%(module)s:%(lineno)s|%(message)s' 其中,req\u id是一个请求id,由应用程序代码为每个请求生成。当我们处理请求时,在我们的应用程序代码上,我们可以访问此req\u id,并将其用于如下记录目的: logger = logging.LoggerAdapter(logging.getLogger(

我们的日志格式化程序有一个用户定义的参数。其定义如下:

'%(asctime)s|%(levelname)s|%(name)s|REQID:%(req_id)s|%(module)s:%(lineno)s|%(message)s'
其中,
req\u id
是一个请求id,由应用程序代码为每个请求生成。当我们处理请求时,在我们的应用程序代码上,我们可以访问此
req\u id
,并将其用于如下记录目的:

logger = logging.LoggerAdapter(logging.getLogger(service_name), {'req_id': req_id})
logger.debug('A debug message')
我正在尝试使tornado logger符合我们的日志格式,但由于tornado无法访问我们的应用程序级别
req\u id
,因此它会失败:

KeyError: 'req_id'
如何告诉tornado在用户提供的上下文中使用
LoggerAdapter
来访问
tornado.access

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

由于我无法告诉tornado要使用什么记录器,因此我设法绕过了这个限制,在每个请求中重新配置tornado记录器,并使用

不幸的是,为每个请求重新配置日志不起作用,因为tornado将并行地为请求提供服务,我们将得到一个不一致的状态


那么我们如何为tornado Logger传递用户上下文呢?

可以通过在子类中重写或使用
log\u函数
应用程序设置来控制
tornado.access
日志。此方法默认写入
tornado.access
log,但您可以根据需要重写它以记录日志

但是请注意,
tornado.general
tornado.application
记录器不能以这种方式覆盖,因此日志格式化程序/筛选器必须仍然能够处理没有
req\u id
字段的消息