問題描述
問題代碼如下:
def get_logger(logger_name):
"""得到日志對象"""
logger = logging.getLogger(logger_name)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('[ %(asctime)s ] - %(levelname)s - %(message)s')
# 用於輸出至文件
file_log_handler = logging.FileHandler(settings.VIEW_LOG_PATH, encoding=settings.DEFAULT_CHARSET)
file_log_handler.setLevel(logging.DEBUG)
file_log_handler.setFormatter(formatter)
# logger綁定處理對象
logger.addHandler(file_log_handler)
return logger
此時例如執行logger = get_logger('HCS'),並且后續日志對象的logger_name均是HCS時,此后多次打印日志會出現日志信息條數線性增加,例如第一次打印一條,第二條打印相同的兩條日志,第三次打印相同的三條日志.......
原因
因為logger的name被固定,所以當你第一次為logger對象添加FileHandler對象之后,如果沒有移除上一次的FileHandler對象,第二次logger對象就會再次獲得相同的FileHandler對象,即擁有兩個FileHandler對象,最終造成打印兩次,同樣,如果此時沒有立即移除上一次的FileHandler對象,第三次logger對象就會再次獲得相同的FileHandler對象,即擁有三個FileHandler象,最終打印3次........
解決辦法
1.每次添加日志,創建與上次日志對象的name屬性不同的logger對象
2.通過logger對象的handlers屬性,控制重復輸出(推薦)
def get_logger(logger_name):
"""得到日志對象"""
logger = logging.getLogger(logger_name)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('[ %(asctime)s ] - %(levelname)s - %(message)s')
if not logger.handlers:
# 用於輸出至文件
file_log_handler = logging.FileHandler(settings.VIEW_LOG_PATH, encoding=settings.DEFAULT_CHARSET)
file_log_handler.setLevel(logging.DEBUG)
file_log_handler.setFormatter(formatter)
# logger綁定處理對象
logger.addHandler(file_log_handler)
return logger
3.每次logger輸出后,移除FileHandler對象
