我有一个这样的记录器初始化函数:
def generate_logger():
import logging
LOG_FILENAME = os.path.join(PROJECT_DIR, "mylog.log")
FORMAT = "%(asctime)s : %(message)s"
logger = logging.getLogger()
logger.setLevel(logging.INFO)
fh = logging.FileHandler(LOG_FILENAME)
formatter = logging.Formatter(FORMAT)
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger
在我的代码的某些部分,我有这样的异常捕获:
logger = generate_logger()
except AttributeError:
logger.error('Opps we got an error')
奇怪的是,我将同样的错误写了 2 次,而且它只能被捕获一次,一旦我将 logger.error('Opps we got an error')
更改为 print "test"
,我打印了一次“test”。
可能是什么问题和解决方案。
问候
最佳答案
每次调用该函数时,您都会向根记录器添加一个新的 FileHandler:调用 logger.getLogger()
时不带名称参数,每次都会返回相同的记录器对象。
您应该只调用一次 generate_logger()
,然后通过调用 logger.getLogger()
简单地获取相同的记录器对象:
generate_logger()
# .... some time later
log = logger.getLogger()
except AttributeError:
log.error('Opps we got an error')
(请注意,您现在不需要 generate_logger()
来返回值)
关于python记录器多次记录相同的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3467524/