1.为什么要写日志?
方便维护、方便调试代码、项目上线后,发现错误能快速定位到错误代码。
1 # [logger] 2 3 # 默认日志格式 4 DEFAULT_LOG_FMT = '%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s: %(message)s' 5 # 默认时间格式 6 DEFUALT_LOG_DATEFMT = '%Y-%m-%d %H:%M:%S' 7 # 输出日志路径 8 LOG_OUT_PATH = r'H:/atlas_project/python_project/example/log/'
1 # -*- coding:utf-8 -*- 2 import sys 3 import logging 4 from time import strftime 5 from log.setting import DEFAULT_LOG_FMT, DEFUALT_LOG_DATEFMT, LOG_OUT_PATH 6 7 8 class Logger(object): 9 def __init__(self): 10 self._logger = logging.getLogger() 11 self.DEFAULT_LOG_FILENAME = '{0}{1}.log'.format(LOG_OUT_PATH, strftime("%Y-%m-%d")) 12 self.formatter = logging.Formatter(fmt=DEFAULT_LOG_FMT, datefmt=DEFUALT_LOG_DATEFMT) 13 self._logger.addHandler(self._get_file_handler(self.DEFAULT_LOG_FILENAME)) 14 self._logger.addHandler(self._get_console_handler()) 15 self._logger.setLevel(logging.INFO) # 默认等级 16 17 def _get_file_handler(self, filename): 18 filehandler = logging.FileHandler(filename, encoding="utf-8") 19 filehandler.setFormatter(self.formatter) 20 return filehandler 21 22 def _get_console_handler(self): 23 console_handler = logging.StreamHandler(sys.stdout) 24 console_handler.setFormatter(self.formatter) 25 return console_handler 26 27 @property 28 def logger(self): 29 return self._logger
2.执行结果