我正在尝试使用Structlog来登录文件,然后使用filebeat将日志发送到我的日志服务。
我已经完成了所有工作,但我希望能够在多个模块中使用相同的记录器,例如Pythons默认记录器(参见https://docs.python.org/2/howto/logging.html部分"从多个模块记录" )。
其中一个原因是我想将sessionID绑定到我的logoutput,该logoutput应记录在此会话中调用的所有模块中。
可能需要一些关于如何使用structlogger的基础知识,但是没有在他们的文档或其他帖子中找到答案。
请建议......
一个例子:
main.py
$months[6]
myLogger.py
"Juni"
otherModule.py
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import uuid
from mylogger import myLogger
import otherModule
myLogger = myLogger()
myLogger.log.warning('working', error='test')
myLogger.log = myLogger.log.bind(sessionID=str(uuid.uuid4()))
myLogger.log.warning('Event where sessionID is bound to logger', error='test')
otherModule = otherModule.otherModule()
答案 0 :(得分:1)
您需要使用包装的字典作为上下文类,如structlog documentation
中所述所以您最终将得到如下结果:
structlog.configure(
processors=[
structlog.stdlib.filter_by_level,
# other processors
],
context_class=structlog.threadlocal.wrap_dict(dict),
)