import logging import time from logging.handlers import TimedRotatingFileHandler import os ''' 日志工具类 ''' class Logger: def __init__(self): # log文件存储路径 current_dir = os.getcwd() if current_dir.endswith('crypto_quant'): output_folder = r'./output/log/' elif current_dir.startswith(r'/root/'): output_folder = r'/root/crypto_quant/output/log/' else: output_folder = r'./output/log/' os.makedirs(output_folder, exist_ok=True) # add self._log_filename to be adata_yyyyMMddHHmm.log self._log_filename = os.path.join(output_folder, 'crypto_monitor_{}.log'.format(time.strftime("%Y%m%d%H%M%S", time.localtime()))) # self._log_filename = os.path.join(output_folder, 'adata.log') ''' %(levelno)s: 打印日志级别的数值 %(levelname)s: 打印日志级别名称 %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0] %(filename)s: 打印当前执行程序名 %(funcName)s: 打印日志的当前函数 %(lineno)d: 打印日志的当前行号 %(asctime)s: 打印日志的时间 %(thread)d: 打印线程ID %(threadName)s: 打印线程名称 %(process)d: 打印进程ID %(message)s: 打印日志信息 ''' logging.basicConfig() # 日志信息输出格式 self._formatter = logging.Formatter('%(asctime)s - %(process)d - %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S') # 创建一个日志对象 self._logger = logging.getLogger() # self.set_console_logger() self.set_file_logger() self._logger.setLevel(logging.INFO) def set_console_logger(self): '''设置控制台日志输出''' console_handler = logging.StreamHandler() console_handler.setFormatter(self._formatter) console_handler.setLevel(logging.INFO) self._logger.addHandler(console_handler) def set_file_logger(self): '''设置日志文件输出''' log_file_handler = TimedRotatingFileHandler(filename=self._log_filename, when="D", interval=1, backupCount=3, encoding='utf-8') log_file_handler.setFormatter(self._formatter) log_file_handler.setLevel(logging.INFO) # log_file_handler.suffix = "%Y%m%d_%H%M%S.log" self._logger.addHandler(log_file_handler) def get_logger(self): return self._logger logger = Logger().get_logger()