代碼:
def print_log():
tim = time.strftime('%Y-%m-%d',time.localtime(time.time()))
logFile = str('{}.log'.format(tim))
# if os.path.exists('../log/{}.log'.format(time)):
# logFile = '{}.log'.format(time)
logger = logging.getLogger('../LOG/{}'.format(logFile))
fmt = '%(asctime)s - %(funcName)s - %(lineno)d - %(name)s - %(levelname)s -%(module)s: %(message)s'
format_str = logging.Formatter(fmt)
logger.setLevel(logging.INFO)
sh = logging.StreamHandler()#輸出到屏幕
sh.setFormatter(format_str)
th = handlers.TimedRotatingFileHandler(filename='../LOG/{}'.format(logFile), when='D', interval=5, encoding='utf-8')
th.setFormatter(format_str)
logger.addHandler(sh)
logger.addHandler(th)
return logger
logger.handlers
最初是一個空列表,執行‘logger.addHandler(sh)’添加一個‘StreamHandler’,輸出一條日誌- 在第二次被調用時,
logger.handlers
已經存在一個‘StreamHandler’,再次執行‘logger.addHandler(sh)’就會再次添加一個‘StreamHandler’,此時的logger有兩個‘StreamHandler’,輸出兩條重複的日誌 - 在第三次被調用時,
logger.handlers
已經存在兩個‘StreamHandler’,再次執行‘logger.addHandler(ch)’就會再次添加一個,此時的logger有三個‘StreamHandler’,輸出三條重複的日誌,
解決辦法:及時清理(logger.handlers.clear)
def print_log():
tim = time.strftime('%Y-%m-%d',time.localtime(time.time()))
logFile = str('{}.log'.format(tim))
# if os.path.exists('../log/{}.log'.format(time)):
# logFile = '{}.log'.format(time)
logger = logging.getLogger('../LOG/{}'.format(logFile))
logger.handlers.clear()#及時清理
fmt = '%(asctime)s - %(funcName)s - %(lineno)d - %(name)s - %(levelname)s -%(module)s: %(message)s'
format_str = logging.Formatter(fmt)
logger.setLevel(logging.INFO)
sh = logging.StreamHandler()#輸出到屏幕
sh.setFormatter(format_str)
th = handlers.TimedRotatingFileHandler(filename='../LOG/{}'.format(logFile), when='D', interval=5, encoding='utf-8')
th.setFormatter(format_str)
logger.addHandler(sh)
logger.addHandler(th)
return logger