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