2
我的問題是設計問題。我有以下Logger類:Python日誌記錄重複行
import logging, logging.handlers
class Logger(object):
def __init__(self, log_filename, name):
self.LOG_FILENAME = log_filename
logging.basicConfig(format='%(asctime)s %(message)s')
formatter = logging.Formatter(
'%(asctime)s - %(levelname)s - %(message)s')
loghandler = logging.handlers.RotatingFileHandler(
self.LOG_FILENAME)
loghandler.setFormatter(formatter)
self.logger = logging.getLogger(name)
self.logger.setLevel(logging.INFO)
self.logger.addHandler(loghandler)
def getLogger(self):
return self.logger
上下文是下面,我有幾個模塊將利用這個類,每類是無關的他人或記錄的,所以每一個類實例化一個新Logger類(即使他們需要編寫到同一個文件),問題是,如果我有2類,需要寫同一個記錄器,我得到重複的線條,這再現了錯誤:
def a():
log = Logger(log_filename='test.log', name='test')
logger = log.getLogger()
logger.info('A')
def b():
log = Logger(log_filename='test.log', name='test')
logger = log.getLogger()
logger.info('B')
所以如果我打電話a()
我會得到我所期望的:2014-12-02 10:26:40,665 - INFO - A
,但如果現在我打電話b()
我會得到:
2014-12-02 10:26:40,665 - INFO - A
2014-12-02 10:26:48,553 - INFO - B
2014-12-02 10:26:48,553 - INFO - B
等等,我知道記錄器是一個Singleton類和錯誤必須是在我的記錄器類,但我認爲getLogger
與記錄器的名稱將返回「相同」的日誌類實例。