12345678910111213141516171819202122232425262728293031323334 |
- from pydantic_settings import BaseSettings
- from pydantic import field_validator
- class LoggingConfig(BaseSettings):
- """日志配置"""
- level: str = "INFO"
- file: str = "app.log"
- path: str = "logs"
- max_size: int = 10485760 # 10MB
- backup_count: int = 5
- format: str = "{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {module}:{line} - {message}"
- 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>"
- @field_validator('level')
- def validate_log_level(cls, value):
- valid_levels = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']
- if value not in valid_levels:
- raise ValueError(f'日志级别必须是: {", ".join(valid_levels)}')
- return value
- @field_validator('max_size')
- def validate_max_log_size(cls, value):
- if value < 1048576: # 1MB
- raise ValueError('日志文件最大大小至少为1MB')
- return value
- def to_string(self, indent: int = 0) -> str:
- """将配置转换为字符串"""
- indent_str = ' ' * indent
- result = []
- for field_name, field_value in self.__dict__.items():
- result.append(f"{indent_str}{field_name}: {field_value}")
- return '\n'.join(result)
|