我希望在 Python 库中使用
structlog
,但也希望透明地支持由包含应用程序设置的日志记录配置。特别是:
logging.basicConfig
),请遵守pytest
日志记录夹具(包括配置的日志级别)由于这是一个库,因此对
structlog
或 logging
配置进行全局更改是不合适的。
到目前为止,我能想到的最好办法就是按照以下方式公开公共 API:
import logging
import structlog.stdlib
def use_stdlib_logging(log_level: int|None = logging.INFO):
"""Configure SDK logging to use stdlib logging with the given log level.
Note: this alters the default global structlog configuration.
"""
structlog.stdlib.recreate_defaults(log_level=log_level)
虽然这可行,但这意味着每个嵌入应用程序都需要知道调用该 API - 默认情况下,该库将完全忽略标准库的日志记录配置。
在向
structlog
的作者提出同样的问题后,我的结论是它确实是一个 application 日志框架。
对于库(不直接负责整体日志记录配置),标准库中的结构化日志记录配方之类的东西是更好的方法。
对于我的用例,我还集成了一个小型日志记录模块包装器,除了记录序列化的 json 之外,还将事件消息和数据添加到
extra_data
字段。