【发布时间】: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