Python - 使用structlog从多个模块进行日志记录

时间:2017-10-08 11:31:10

标签: python elasticsearch logging filebeat

我正在尝试使用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()

1 个答案:

答案 0 :(得分:1)

您需要使用包装的字典作为上下文类,如structlog documentation

中所述

所以您最终将得到如下结果:

structlog.configure(
    processors=[
        structlog.stdlib.filter_by_level,
        # other processors
    ],
    context_class=structlog.threadlocal.wrap_dict(dict),
)