import os import sys import logging from time import strftime # 设置日志格式#和时间格式 # FMT = '%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s: %(message)s' FMT = '%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s: %(message)s' DATEFMT = '%Y-%m-%d %H:%M:%S' class MyLog(object): def __init__(self, log_path, type_='train'): self.logger = logging.getLogger() self.formatter = logging.Formatter(fmt=FMT, datefmt=DATEFMT) self.log_filename = os.path.join(log_path, 'train.log' if type_=='train' else 'test.log') # self.log_filename = '{0}{1}.log'.format(log_path, strftime("%Y-%m-%d")) # 输出到文件 self.logger.addHandler(self.get_file_handler(self.log_filename)) # 输出到控制台 # self.logger.addHandler(self.get_console_handler()) # 设置日志的默认级别 # 打印DEBUG级别以及以上的日志 # 级别排序为:CRITICAL > ERROR > WARNING > INFO > DEBUG self.logger.setLevel(logging.INFO) # 输出到文件handler的函数定义 def get_file_handler(self, filename): filehandler = logging.FileHandler(filename, encoding="utf-8") filehandler.setFormatter(self.formatter) return filehandler # 输出到控制台handler的函数定义 def get_console_handler(self): console_handler = logging.StreamHandler(sys.stdout) console_handler.setFormatter(self.formatter) return console_handler def setup_logger(log_path=None, type_='train'): # 输出日志路径 if log_path is not None: os.makedirs(log_path, exist_ok=True) return MyLog(log_path, type_).logger log_path = os.path.abspath('.') + '/logs/' return MyLog(log_path, type_).logger