是否建议在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'另一个是根记录器。我为两个记录器分配了相同的处理程序。到目前为止我的用法似乎很好,但我想知道是否有任何问题在路上?
答案 0 :(得分:2)
通常最好将处理程序添加到需要它们的最高级别记录器中。在您的示例中,您可以通过仅将处理程序添加到根记录器而不将propagate
记录器上的sth
标记设置为False
来实现相同的效果。
将相同的处理程序添加到多个记录器应该没有坏处,但如果不禁用传播,它可能会导致消息在日志中重复。
许多应用程序只是向根记录器添加处理程序,让传播处理其余的,其他应用程序仅为特定要求向非root记录器添加其他处理程序。
答案 1 :(得分:0)
可能不是。也许是吧。可能有。谁知道?
换句话说,它取决于处理程序。它们不打算重用:有些实现可能没问题,有些可能有内部状态可能搞砸了。
我会复制该对象,而不是重复使用它,作为一条经验法则。