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处理程序
    ,它没有捕获传播的事件,这就是我搜索解决方案的原因。谢谢,您可以将此添加为答案。