python中的共享记录器
我有一个使用第三方软件包的项目(第三方软件包也可能使用其他软件包)。我想将一个公共python中的共享记录器,python,logging,Python,Logging,我有一个使用第三方软件包的项目(第三方软件包也可能使用其他软件包)。我想将一个公共xxxHandler应用于所有包的日志记录。由于所有包都定义了logger=logging.getLogger(\uuuu name\uuuuuu),因此我实现了以下解决方案: handler=RotatingFileHandler(filename='app.log') 对于logging.root.manager.loggerDict中的名称: logging.getLogger(名称).addHandler(
xxxHandler
应用于所有包的日志记录。由于所有包都定义了logger=logging.getLogger(\uuuu name\uuuuuu)
,因此我实现了以下解决方案:
handler=RotatingFileHandler(filename='app.log')
对于logging.root.manager.loggerDict中的名称:
logging.getLogger(名称).addHandler(处理程序)
这是可行的,但它会为每个日志创建多个条目(可能是因为日志传播)。因此,我通过提供一个应该获得处理程序的名称的列表来增强这一点:
def将\u处理程序添加到\u记录器(记录器=无):
如果伐木工人:
对于记录器中的名称:
logging.getLogger(名称).addHandler(处理程序)
将处理程序添加到日志记录器(['requests','sleekxmpp']
我对此感到高兴。但是,我不确定我是否会丢失其他软件包中的任何重要日志
问题
这是解决我问题的好方法吗
有更好的方法吗
谢谢!最好只向root添加一个处理程序,让其他记录器在那里传播(默认情况下是这样的)@blues你说得对。我使用了getLogger(\uuuuu name\uuu)而不是使用root处理程序
,它没有捕获传播的事件,这就是我搜索解决方案的原因。谢谢,您可以将此添加为答案。