logger.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import logging
  2. import os
  3. from logging.handlers import RotatingFileHandler
  4. from pathlib import Path
  5. from core.singleton import Singleton
  6. class Logger(metaclass=Singleton):
  7. def __init__(self):
  8. # 注意:这里不再直接导入ConfigManager
  9. self._config_manager = None # 延迟设置配置管理器
  10. self.logger = logging.getLogger('automation_framework')
  11. self._setup_logger()
  12. def set_config_manager(self, config_manager):
  13. """设置配置管理器(延迟初始化)"""
  14. self._config_manager = config_manager
  15. # 重新设置日志配置,因为现在有了配置管理器
  16. self._setup_logger()
  17. def _setup_logger(self):
  18. """配置日志记录器"""
  19. # 如果配置管理器尚未设置,使用默认配置
  20. if not self._config_manager:
  21. log_level = 'INFO'
  22. log_format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
  23. log_file = 'resources/logs/automation.log'
  24. max_size = 10485760 # 10MB
  25. backup_count = 5
  26. else:
  27. # 从配置管理器获取配置
  28. log_level = self._config_manager.get('logging.level', 'INFO')
  29. log_format = self._config_manager.get('logging.format',
  30. '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  31. log_file = self._config_manager.get('logging.file', 'resources/logs/automation.log')
  32. max_size = self._config_manager.get('logging.max_size', 10485760)
  33. backup_count = self._config_manager.get('logging.backup_count', 5)
  34. # 设置日志级别
  35. self.logger.setLevel(getattr(logging, log_level.upper()))
  36. # 创建格式化器
  37. formatter = logging.Formatter(log_format)
  38. # 创建控制台处理器
  39. console_handler = logging.StreamHandler()
  40. console_handler.setFormatter(formatter)
  41. self.logger.addHandler(console_handler)
  42. # 创建文件处理器
  43. log_path = Path(log_file)
  44. log_path.parent.mkdir(parents=True, exist_ok=True)
  45. file_handler = RotatingFileHandler(
  46. log_path,
  47. maxBytes=max_size,
  48. backupCount=backup_count,
  49. encoding='utf-8'
  50. )
  51. file_handler.setFormatter(formatter)
  52. self.logger.addHandler(file_handler)
  53. @classmethod
  54. def get_logger(cls):
  55. """获取日志记录器实例"""
  56. instance = cls()
  57. return instance.logger
  58. def debug(self, message):
  59. """记录调试信息"""
  60. self.logger.debug(message)
  61. def info(self, message):
  62. """记录一般信息"""
  63. self.logger.info(message)
  64. def warning(self, message):
  65. """记录警告信息"""
  66. self.logger.warning(message)
  67. def error(self, message):
  68. """记录错误信息"""
  69. self.logger.error(message)
  70. def critical(self, message):
  71. """记录严重错误信息"""
  72. self.logger.critical(message)
  73. def exception(self, message):
  74. """记录异常信息"""
  75. self.logger.exception(message)