我有一个使用内置日志记录模块的多线程 Python 应用程序。为了控制日志记录级别并使将来更容易StreamHandler
与 a交换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