logging.getLogger("base.b-6ren">
gpt4 book ai didi

python - 如何在 python 中使用具有相同日志处理程序的不同格式化程序

转载 作者:IT老高 更新时间:2023-10-28 21:03:39 24 4
gpt4 key购买 nike

是否可以使用多个记录器(即 logging.getLogger("base.foo") 记录到单个目的地(即使用一个 FileHandler) >logging.getLogger("base.bar")),并为每个记录器使用不同的格式化程序。

据我了解,只能为每个句柄分配一个格式化程序。也许可以将格式化程序与记录器而不是处理程序相关联?

最佳答案

很容易根据 record.name 分派(dispatch)到不同的格式化程序。以下是概念验证示例代码:

import logging


class DispatchingFormatter:

def __init__(self, formatters, default_formatter):
self._formatters = formatters
self._default_formatter = default_formatter

def format(self, record):
formatter = self._formatters.get(record.name, self._default_formatter)
return formatter.format(record)


handler = logging.StreamHandler()
handler.setFormatter(DispatchingFormatter({
'base.foo': logging.Formatter('FOO: %(message)s'),
'base.bar': logging.Formatter('BAR: %(message)s'),
},
logging.Formatter('%(message)s'),
))
logging.getLogger().addHandler(handler)

logging.getLogger('base.foo').error('Log from foo')
logging.getLogger('base.bar').error('Log from bar')
logging.getLogger('base.baz').error('Log from baz')

另一种方法是手动打开文件并使用不同的格式化程序从中创建两个流处理程序。

关于python - 如何在 python 中使用具有相同日志处理程序的不同格式化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1741972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com