import logging import os from logging.handlers import RotatingFileHandler from pathlib import Path from core.singleton import Singleton class Logger(metaclass=Singleton): def __init__(self): # 注意:这里不再直接导入ConfigManager self._config_manager = None # 延迟设置配置管理器 self.logger = logging.getLogger('automation_framework') self._setup_logger() def set_config_manager(self, config_manager): """设置配置管理器(延迟初始化)""" self._config_manager = config_manager # 重新设置日志配置,因为现在有了配置管理器 self._setup_logger() def _setup_logger(self): """配置日志记录器""" # 如果配置管理器尚未设置,使用默认配置 if not self._config_manager: log_level = 'INFO' log_format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' log_file = 'resources/logs/automation.log' max_size = 10485760 # 10MB backup_count = 5 else: # 从配置管理器获取配置 log_level = self._config_manager.get('logging.level', 'INFO') log_format = self._config_manager.get('logging.format', '%(asctime)s - %(name)s - %(levelname)s - %(message)s') log_file = self._config_manager.get('logging.file', 'resources/logs/automation.log') max_size = self._config_manager.get('logging.max_size', 10485760) backup_count = self._config_manager.get('logging.backup_count', 5) # 设置日志级别 self.logger.setLevel(getattr(logging, log_level.upper())) # 创建格式化器 formatter = logging.Formatter(log_format) # 创建控制台处理器 console_handler = logging.StreamHandler() console_handler.setFormatter(formatter) self.logger.addHandler(console_handler) # 创建文件处理器 log_path = Path(log_file) log_path.parent.mkdir(parents=True, exist_ok=True) file_handler = RotatingFileHandler( log_path, maxBytes=max_size, backupCount=backup_count, encoding='utf-8' ) file_handler.setFormatter(formatter) self.logger.addHandler(file_handler) @classmethod def get_logger(cls): """获取日志记录器实例""" instance = cls() return instance.logger def debug(self, message): """记录调试信息""" self.logger.debug(message) def info(self, message): """记录一般信息""" self.logger.info(message) def warning(self, message): """记录警告信息""" self.logger.warning(message) def error(self, message): """记录错误信息""" self.logger.error(message) def critical(self, message): """记录严重错误信息""" self.logger.critical(message) def exception(self, message): """记录异常信息""" self.logger.exception(message)