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
与记录器的名称将返回“相同”的日志类实例。