0
我有一个多线程的Python应用程序,它使用built in logging模块。为了控制日志记录级别,并且将来可以更容易地将StreamHandler
与FileHandler
进行交换,我创建了一个通用帮助函数,由每个模块调用以创建一个相同的记录器(不同于它的名称)。什么可能导致记录模块多次记录记录?
我该如何解决这个问题?
要点
- 项目中的每个模块都有自己的记录器实例。是通过向记录器(
self._logger.info("Logger Setup")
) - 我试图包括当前线程名(
threading.Thread.getName()
)的单个调用生成 - 示例输出和它确认同一线程调用导致多个日志。
记录仪创作 - 现在的工作
import logging
import sys
def createSystemLogHandler(logger):
# This is now called once at the logger's root
ch = logging.StreamHandler(sys.stdout) # Normal output is to stderr which doesn't show up on Window's CMD
format = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s')
ch.setFormatter(format)
logger.addHandler(ch)
return logger
def configureSystemLogger(name='', level=logging.WARNING):
logger = logging.getLogger(name)
logger.setLevel(level)
logger.info("Logger Setup")
return logger
样本输出
2012-04-25 21:59:40,720 - INFO - HW_MGR - Logger Setup
2012-04-25 21:59:40,720 - INFO - HW_MGR - Logger Setup
2012-04-25 21:59:40,720 - INFO - HW_MGR - Logger Setup
2012-04-25 21:59:40,720 - INFO - HW_MGR - Logger Setup
2012-04-25 21:59:40,720 - INFO - HW_MGR - Logger Setup
那么我“知道”我有多个处理程序,但它并没有为我注册,他们都会在每条消息上调用它的'emit'。 – 2012-05-01 13:36:05