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

 

 

發佈了10 篇原創文章 · 獲贊 1 · 訪問量 2287
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章