在库中使用“structlog”,同时尊重“stdlib”日志配置

问题描述 投票:0回答:1

我希望在 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 - 默认情况下,该库将完全忽略标准库的日志记录配置。

python structlog
1个回答
0
投票

在向

structlog
的作者提出同样的问题后,我的结论是它确实是一个 application 日志框架。

对于库(不直接负责整体日志记录配置),标准库中的结构化日志记录配方之类的东西是更好的方法。

对于我的用例,我还集成了一个小型日志记录模块包装器,除了记录序列化的 json 之外,还将事件消息和数据添加到

extra_data
字段。

© www.soinside.com 2019 - 2024. All rights reserved.