【发布时间】:2012-04-26 03:19:33
【问题描述】:
我有一个使用 built in logging 模块的多线程 Python 应用程序。为了控制日志记录级别并使将来更容易将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
【问题讨论】: