将自定义值传递给记录器而不是每条消息

Ago*_*Ago 9 python logging python-3.x

我想记录用户会话。目前代码如下(省略设置formatter和handlers):

logger = logging.getLogger("component")
logger.info("message", extra={"session": 123})
logger.debug("debug", extra={"session": 123})
Run Code Online (Sandbox Code Playgroud)

如果要记录多条消息,则每次都发送这些额外信息会很烦人。实现类似目标的最佳/最干净/最Python式的方法是什么:

logger = logging.getLogger("component")
# for example:
logger.addExtra({"session": 123})
logger.info("message") # extra would be added automatically
logger.debug("debug") # extra would be added automatically
Run Code Online (Sandbox Code Playgroud)

我可以考虑扩展记录器并覆盖记录方法。

Jim*_*ard 4

创建一个LoggerAdapter指定的@DhruvPathak。根据LoggerAdapters签名

class logging.LoggerAdapter(logger, extra)
Run Code Online (Sandbox Code Playgroud)

您可以通过在初始化期间提供记录器实例和extra参数来做到这一点:

logger = logging.LoggerAdapter(logger, extra)
Run Code Online (Sandbox Code Playgroud)