log_codes.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. # core/utils/log_codes.py
  2. """
  3. 阿里云日志码统一管理
  4. 采用分层分类的方式管理所有日志码
  5. """
  6. from enum import Enum
  7. from typing import Dict, Any
  8. class LogCategory(Enum):
  9. """日志分类"""
  10. SYSTEM = "系统" # 系统相关日志
  11. TASK = "任务" # 任务处理日志
  12. DATA = "数据" # 数据处理日志
  13. ERROR = "错误" # 错误日志
  14. MONITOR = "监控" # 监控日志
  15. class LogCodeManager:
  16. """日志码管理器"""
  17. # 系统日志码 (1000-1999)
  18. SYSTEM_START = ("1000", "系统启动", LogCategory.SYSTEM)
  19. SYSTEM_SHUTDOWN = ("1001", "系统关闭", LogCategory.SYSTEM)
  20. SYSTEM_HEALTHY = ("1002", "系统健康检查", LogCategory.SYSTEM)
  21. # 任务日志码 (2000-2999)
  22. TASK_RECEIVED = ("2000", "任务接收成功", LogCategory.TASK)
  23. TASK_START = ("2001", "任务开始执行", LogCategory.TASK)
  24. TASK_SUCCESS = ("2010", "任务执行成功", LogCategory.TASK)
  25. TASK_FAILED = ("2011", "任务执行失败", LogCategory.TASK)
  26. # 数据处理日志码 (3000-3999)
  27. DATA_PROCESS_START = ("3000", "开始处理数据", LogCategory.DATA)
  28. DATA_PROCESS_SUCCESS = ("3001", "数据处理成功", LogCategory.DATA)
  29. DATA_VALIDATION_FAILED = ("3002", "数据验证失败", LogCategory.DATA)
  30. DATA_TRANSFORM_SUCCESS = ("3003", "数据转换成功", LogCategory.DATA)
  31. # 错误日志码 (9000-9999)
  32. ERROR_GENERAL = ("9000", "一般错误", LogCategory.ERROR)
  33. ERROR_NETWORK = ("9001", "网络错误", LogCategory.ERROR)
  34. ERROR_DATABASE = ("9002", "数据库错误", LogCategory.ERROR)
  35. ERROR_CONFIG = ("9003", "配置错误", LogCategory.ERROR)
  36. # 监控日志码 (1500-1599)
  37. MONITOR_PROCESS_START = ("1500", "进程启动", LogCategory.MONITOR)
  38. MONITOR_PROCESS_RESTART = ("1501", "进程重启", LogCategory.MONITOR)
  39. MONITOR_PROCESS_STOP = ("1502", "进程停止", LogCategory.MONITOR)
  40. @classmethod
  41. def get_code_info(cls, code: str) -> Dict[str, Any]:
  42. """根据code获取日志信息"""
  43. for attr_name in dir(cls):
  44. if not attr_name.startswith('_') and attr_name.isupper():
  45. code_info = getattr(cls, attr_name)
  46. if isinstance(code_info, tuple) and code_info[0] == code:
  47. return {
  48. "code": code_info[0],
  49. "message": code_info[1],
  50. "category": code_info[2].value
  51. }
  52. return None
  53. @classmethod
  54. def get_codes_by_category(cls, category: LogCategory) -> list:
  55. """根据分类获取所有日志码"""
  56. codes = []
  57. for attr_name in dir(cls):
  58. if not attr_name.startswith('_') and attr_name.isupper():
  59. code_info = getattr(cls, attr_name)
  60. if isinstance(code_info, tuple) and code_info[2] == category:
  61. codes.append({
  62. "name": attr_name,
  63. "code": code_info[0],
  64. "message": code_info[1]
  65. })
  66. return codes
  67. @classmethod
  68. def validate_code(cls, code: str) -> bool:
  69. """验证日志码是否存在"""
  70. return cls.get_code_info(code) is not None
  71. # 全局实例
  72. log_codes = LogCodeManager()