python 调用logging函数,函数重复打印的问题

代码:

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
  1. logger.handlers最初是一个空列表,执行‘logger.addHandler(sh)’添加一个‘StreamHandler’,输出一条日志
  2. 在第二次被调用时,logger.handlers已经存在一个‘StreamHandler’,再次执行‘logger.addHandler(sh)’就会再次添加一个‘StreamHandler’,此时的logger有两个‘StreamHandler’,输出两条重复的日志
  3. 在第三次被调用时,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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值