logger_manager.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from core.utils.log.aliyun_log import AliyunLogger
  2. from core.utils.log.local_log import Local
  3. from loguru._logger import Logger as LoguruLogger
  4. class LoggerManager:
  5. """
  6. 日志管理器
  7. """
  8. _local_loggers: dict[str, LoguruLogger] = {}
  9. _aliyun_loggers: dict[str, AliyunLogger] = {}
  10. @staticmethod
  11. def get_logger(
  12. platform: str = "system",
  13. mode: str = "crawler",
  14. log_to_console: bool = False
  15. ) -> LoguruLogger:
  16. key = f"{platform}_{mode}"
  17. if key not in LoggerManager._local_loggers:
  18. LoggerManager._local_loggers[key] = Local.init_logger(
  19. platform=platform,
  20. mode=mode,
  21. log_to_console=log_to_console
  22. )
  23. return LoggerManager._local_loggers[key]
  24. @staticmethod
  25. def get_aliyun_logger(
  26. platform: str = "system",
  27. mode: str = "crawler",
  28. env: str = "prod"
  29. ) -> AliyunLogger:
  30. key = f"{platform}_{mode}"
  31. if key not in LoggerManager._aliyun_loggers:
  32. LoggerManager._aliyun_loggers[key] = AliyunLogger(
  33. platform=platform,
  34. mode=mode,
  35. env=env
  36. )
  37. return LoggerManager._aliyun_loggers[key]
  38. def log_event(
  39. self,
  40. code: str,
  41. message: str,
  42. data: dict[str, Any],
  43. trace_id: str = "",
  44. platform: str = "system",
  45. mode: str = "crawler",
  46. level: str = "info"
  47. ):
  48. logger = self.get_logger(platform=platform, mode=mode)
  49. aliyun_logger = self.get_aliyun_logger(platform=platform, mode=mode)
  50. # 本地记录
  51. getattr(logger, level.lower(), logger.info)(f"{code} | {message} | {data}")
  52. # 阿里云记录
  53. aliyun_logger.logging(code=code, message=message, data=data, trace_id=trace_id)