config_logging.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435
  1. from pydantic_settings import BaseSettings
  2. from pydantic import field_validator
  3. class LoggingConfig(BaseSettings):
  4. """日志配置"""
  5. level: str = "INFO"
  6. file: str = "app.log"
  7. path: str = "logs"
  8. max_size: int = 10485760 # 10MB
  9. backup_count: int = 5
  10. retention_days: int = 7 # 日志保留天数
  11. format: str = "{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {module}:{line} - {message}"
  12. console_format: str = "<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level}</level> | <cyan>{module}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>"
  13. @field_validator('level')
  14. def validate_log_level(cls, value):
  15. valid_levels = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']
  16. if value not in valid_levels:
  17. raise ValueError(f'日志级别必须是: {", ".join(valid_levels)}')
  18. return value
  19. @field_validator('max_size')
  20. def validate_max_log_size(cls, value):
  21. if value < 1048576: # 1MB
  22. raise ValueError('日志文件最大大小至少为1MB')
  23. return value
  24. def to_string(self, indent: int = 0) -> str:
  25. """将配置转换为字符串"""
  26. indent_str = ' ' * indent
  27. result = []
  28. for field_name, field_value in self.__dict__.items():
  29. result.append(f"{indent_str}{field_name}: {field_value}")
  30. return '\n'.join(result)