[英]How to get multiple independent loggers using structlog
我正在拼命寻找以下问题的解决方案:对于一个项目,我需要多个独立的记录器,比如说一个用于记录用户到控制台(stderr)的可读进度,一个用于将一些统计信息收集到 json 输出文件中。 我正在使用 structlog,下面的示例显示了问题
import structlog
logger1 = structlog.get_logger()
logger1.info('make something that needs to be logged', x=1, y=2, z='abc')
logger2 = structlog.get_logger()
structlog.configure(processors=[structlog.processors.JSONRenderer()])
logger2.info('structured_output', a=[1, 2, 3], b={'a': 1})
logger1.info('now this one is also json but it shouldn\'t')
给出输出
2022-06-08 08:30.34 [info ] make something that needs to be logged x=1 y=2 z=abc
{"a": [1, 2, 3], "b": {"a": 1}, "event": "structured_output"}
{"event": "now this one is also json but it shouldn't"}
logger1 工作正常,直到我为 json 渲染应用配置。
我想看到的是
2022-06-08 08:30.34 [info ] make something that needs to be logged x=1 y=2 z=abc
{"a": [1, 2, 3], "b": {"a": 1}, "event": "structured_output"}
2022-06-08 08:39.41 [info ] still no json output, great!
如何保持两个记录器分开,以便 logger1 的配置保持不变?
谢谢! 最大限度
这有点复杂,但可以使用 structlog 最强大的标准库集成策略,其中每个日志条目都通过标准库,并允许您将标准库用于:
上面链接的底部演示了多路复用,并举例说明了如何在终端中将彩色日志和普通日志放入文件中。
现在缺少的是根据记录器的名称在它们之间进行调度。 您可以执行类似structlog.[stdlib.]get_logger("json-only")
的操作,将其设置为使用记录器名称的众所周知的名称,然后可以在标准库日志记录配置中引用。
它不像我希望的那样直截了当,但文档中的示例应该提供一个很好的起点。
没关系,我把事情复杂化了......我将 structlog 日志记录保留在控制台中,并编写了一个小的自定义 json-report 类来解决问题。 不过感谢您的帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.