import logging from homework.exam_homework_0413.common import contants from homework.exam_homework_0413.common.read_config import config def get_logger(name): logger=logging.getLogger(name) logger.setLevel(config.get_strValue("log","logger_level"))
fmt="%(asctime)s - %(name)s - %(levelname)s - %(message)s - [%(filename)s:%(lineno)d]" formatter=logging.Formatter(fmt=fmt) console_handler=logging.StreamHandler() console_handler.setLevel(config.get_strValue("log","console_level")) console_handler.setFormatter(formatter) file_handler=logging.FileHandler(contants.log_dir+"/case.log",encoding='utf-8') file_handler.setLevel(config.get_strValue("log","file_level")) file_handler.setFormatter(formatter) logger.addHandler(console_handler) logger.addHandler(file_handler) return logger
問題:
日志封裝成類/函數(如上面logger.py模塊,將日志封裝成get_logger()函數),使用下面方式調用get_logger()函數,會出現重復寫日志問題,如第一條打印一遍,第二條打印2遍 第3條打印3遍...
if __name__=='__main__': get_logger(__name__).debug("這是bug") get_logger(__name__).info("這是info") get_logger(__name__).warning("這是warning")
結果:
2019-04-29 15:57:09,491 - __main__ - DEBUG - 這是bug - [logger.py:33] 2019-04-29 15:57:09,491 - __main__ - INFO - 這是info - [logger.py:34] 2019-04-29 15:57:09,491 - __main__ - INFO - 這是info - [logger.py:34] 2019-04-29 15:57:09,492 - __main__ - WARNING - 這是warning - [logger.py:35] 2019-04-29 15:57:09,492 - __main__ - WARNING - 這是warning - [logger.py:35] 2019-04-29 15:57:09,492 - __main__ - WARNING - 這是warning - [logger.py:35]
解決方法:
每條日志使用同一個對象/函數調用
if __name__=='__main__': logger=get_logger(__name__) logger.debug("這是bug") logger.info("這是info") logger.warning("這是warning")
結果:
2019-04-29 16:03:24,655 - __main__ - DEBUG - 這是bug - [logger.py:34] 2019-04-29 16:03:24,655 - __main__ - INFO - 這是info - [logger.py:35] 2019-04-29 16:03:24,655 - __main__ - WARNING - 這是warning - [logger.py:36]