代码:
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