config_logging.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334
  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. format: str = "{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {module}:{line} - {message}"
  11. 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>"
  12. @field_validator('level')
  13. def validate_log_level(cls, value):
  14. valid_levels = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']
  15. if value not in valid_levels:
  16. raise ValueError(f'日志级别必须是: {", ".join(valid_levels)}')
  17. return value
  18. @field_validator('max_size')
  19. def validate_max_log_size(cls, value):
  20. if value < 1048576: # 1MB
  21. raise ValueError('日志文件最大大小至少为1MB')
  22. return value
  23. def to_string(self, indent: int = 0) -> str:
  24. """将配置转换为字符串"""
  25. indent_str = ' ' * indent
  26. result = []
  27. for field_name, field_value in self.__dict__.items():
  28. result.append(f"{indent_str}{field_name}: {field_value}")
  29. return '\n'.join(result)