在记录调用的格式中处理不同的额外参数集

我想让记录器的调用者将任何(或没有)“额外”值的集合传递给记录器,并希望以一致的方式格式化它们。

To use the normal formatting strings of the logging module I seem to have to know which key, value pairs are going to be included in the extra dictionary beforehand. My main question is how to handle different set of extra key, value pairs by different callers.

例如,以下记录器调用:

import logging
logger = logging.getLogger(__name__)
logger.warn("Test Message 1", extra={"state_id": 1, "country_id": 2, "city_id": 3})
logger.warn("Test Message 2", extra={"city_id": 3, "state_id": 1})
logger.warn("Test Message 3")

我想作为:

“警告:测试消息1 {city_id:3,country_id:2,state_id:1}”

“警告:测试消息2 {city_id:3,state_id:1}”

“警告:测试消息3”

我还有一些技术限制:

  1. 除了“标准”文本输出外,我还将日志记录记录导出为json-logs,其中包含不同的id,并且message字段应仅包含原始消息。因此,我不能仅将这些值附加到消息本身。
  2. 我不控制客户端代码,因此无法更改记录器的调用方式。
  3. 由于我可能拥有不同的记录器,它们共享相同的格式化程序/处理程序,因此我更喜欢在格式化程序/处理程序级别上适用于所有不同记录器的一些解决方案。
评论