4

是否建议对 Python 中的不同记录器使用相同的处理程序。例如:

logger = logging.getLogger('sth')
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
formatter = logging.Formatter('[%(levelname)1.1s %(asctime)s %(funcName)s:%(lineno)d] - %(message)s', '%y%m%d %H:%M:%S')
handler.setFormatter(formatter)
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)
logger.propagate = False

logging.getLogger().addHandler(handler)
logging.getLogger().setLevel(logging.DEBUG)

在这里,我设置了两个记录器,一个名为“sth”,另一个是根记录器。我为两个记录器分配了相同的处理程序。到目前为止,我的使用情况似乎还不错,但我想知道路上是否有任何问题?

4

2 回答 2

3

通常最好将处理程序添加到需要它们的最高级别记录器。在您的示例中,您可以通过仅将处理程序添加到根记录器而不将记录器propagate上的标志设置为.sthFalse

将相同的处理程序添加到多个记录器应该没有什么害处,但是如果您不禁用传播,它可能会导致消息在日志中重复。

许多应用程序只是将处理程序添加到根记录器并让传播处理其余部分,其他应用程序仅为特定要求向非根记录器添加额外的处理程序。

于 2013-03-13T12:14:43.693 回答
0

可能不是。也许是的。可能有。谁知道?

换句话说,它依赖于 Handler。它们不打算被重用:有些实现可能没问题,有些可能有内部状态可能会被搞砸。

根据经验,我会复制该对象,而不是重复使用它。

于 2013-03-08T23:56:41.350 回答