我们可以为不同的记录器使用相同的处理程序

时间:2013-03-08 23:47:37

标签: python logging

是否建议在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'另一个是根记录器。我为两个记录器分配了相同的处理程序。到目前为止我的用法似乎很好,但我想知道是否有任何问题在路上?

2 个答案:

答案 0 :(得分:2)

通常最好将处理程序添加到需要它们的最高级别记录器中。在您的示例中,您可以通过仅将处理程序添加到根记录器而不将propagate记录器上的sth标记设置为False来实现相同的效果。

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

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

答案 1 :(得分:0)

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

换句话说,它取决于处理程序。它们不打算重用:有些实现可能没问题,有些可能有内部状态可能搞砸了。

我会复制该对象,而不是重复使用它,作为一条经验法则。

相关问题