# import logging # import sys # class LogHelper: # def __init__(self, # level=logging.INFO, # format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', # handlers=None): # """ # 初始化日志配置 # :param level: 日志级别,默认为 logging.INFO # :param format: 日志格式字符串 # :param handlers: 日志处理器列表,默认为空(会自动添加控制台处理器) # """ # self.level = level # self.format = format # self.handlers = handlers if handlers is not None else [] # def add_console_handler(self, stream=sys.stdout, encoding='utf-8'): # """添加控制台处理器""" # console_handler = logging.StreamHandler(stream) # console_handler.setFormatter(logging.Formatter(self.format)) # # 设置控制台编码 # if encoding: # console_handler.encoding = encoding # self.handlers.append(console_handler) # def add_file_handler(self, filename, encoding='utf-8'): # """添加文件处理器(解决中文乱码问题)""" # # 使用支持UTF-8编码的文件处理器 # filepath = "log/" + filename # file_handler = logging.FileHandler(filepath, encoding=encoding) # file_handler.setFormatter(logging.Formatter(self.format)) # self.handlers.append(file_handler) # def setup(self): # """应用日志配置""" # logging.basicConfig( # level=self.level, # format=self.format, # handlers=self.handlers # ) import logging import sys import os from datetime import datetime class LogHelper: def __init__(self, level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=None, log_dir="logs"): """ 初始化日志配置 :param level: 日志级别,默认为 logging.INFO :param format: 日志格式字符串 :param handlers: 日志处理器列表,默认为空(会自动添加控制台处理器) :param log_dir: 日志存储目录,默认为"logs" """ self.level = level self.format = format self.handlers = handlers if handlers is not None else [] self.log_dir = log_dir # 确保日志目录存在 os.makedirs(self.log_dir, exist_ok=True) def add_console_handler(self, stream=sys.stdout, encoding='utf-8'): """添加控制台处理器""" console_handler = logging.StreamHandler(stream) console_handler.setFormatter(logging.Formatter(self.format)) if encoding: console_handler.encoding = encoding self.handlers.append(console_handler) def _get_daily_log_path(self): """生成基于当前日期的日志文件路径""" today = datetime.now().strftime("%Y-%m-%d") filename = f"{today}.log" return os.path.join(self.log_dir, filename) def _add_daily_file_handler(self, encoding='utf-8'): """添加按日期自动创建的文件处理器""" log_path = self._get_daily_log_path() file_handler = logging.FileHandler(log_path, encoding=encoding) file_handler.setFormatter(logging.Formatter(self.format)) self.handlers.append(file_handler) def setup(self): """应用日志配置(自动添加日期文件处理器)""" # 如果未提供任何处理器,默认添加控制台和日期文件处理器 if not self.handlers: self.add_console_handler() self._add_daily_file_handler() # 应用配置 logging.basicConfig( level=self.level, format=self.format, handlers=self.handlers )