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.執行結果