| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- 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)
|