【问题标题】:Is there a way to update python logging configuration between tests?有没有办法在测试之间更新 python 日志配置?
【发布时间】:2022-08-23 20:26:20
【问题描述】:

我在 pytest 项目中的目标是创建一个以 json 格式写入日志文件的记录器。

这是我初始化记录器的函数:

def logger_setup(name):

logger = logging.getLogger(name)
logger.setLevel(logging.INFO)

log_format = logging.Formatter(
    json.dumps(
        {
            \"@timestamp\": \"%(asctime)s.%(msecs)03d+00:00\",
            \"body.message\": \"%(message)s\",
            \"log_level\": \"%(levelname)2s\",
            \"node\": \"some_nodename\",
            \"deviceId\": f\"{generate_device_id}\"  # generates uuid
        }
    ),
    datefmt=\"%Y-%m-%dT%H:%M:%S\"
)

file_handler = logging.FileHandler(Path(\'./logs/test_json.log\'), mode=\'w\')
file_handler.setFormatter(log_format)
file_handler.setLevel(logging.INFO)
logger.addHandler(file_handler)

return logger

问题是每次测试都要更改device_id。我需要在两个地方更改device_id - 在上面的代码和类的实例中log_format,所以我有一个函数。

所以我不知道如何重新初始化我的记录器而不丢失以前的日志数据。也许我可以创建一个 pytest 夹具生成新的 uuid 并重新初始化我的记录器?但我确信这会更容易——我对logging 模块的了解并不深。或者也许有任何方法可以通过f\"{generate_device_id}\",例如\"%(message)s\"

提前致谢!

    标签: python logging pytest python-logging


    【解决方案1】:

    logging.Filter 是solution

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 2021-02-08
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多