我们可以为不同的日志记录器使用相同的处理器吗
在Python中,使用相同的处理器(handler)给不同的日志记录器(logger)是否推荐呢?比如:
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
可能不行,也许可以,可能有这种情况。谁知道呢?
换句话说,这要看具体的处理器(Handler)。这些处理器一般不应该被重复使用:有些实现可能可以重复用,但有些可能会因为内部状态混乱而出问题。
作为一个经验法则,我建议你复制这个对象,而不是重复使用它。
5
一般来说,最好是在需要的最高级别的日志记录器上添加处理程序。在你的例子中,你只需将处理程序添加到根日志记录器上,而不需要把sth
日志记录器的propagate
标志设置为False
,就能达到同样的效果。
将相同的处理程序添加到多个日志记录器上通常是没问题的,但如果你不禁用传播,可能会导致日志中出现重复的消息。
很多应用程序只是将处理程序添加到根日志记录器上,然后让传播自动处理其他的,另外一些则会根据特定需求在非根日志记录器上添加额外的处理程序。