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 = "{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {module}:{line} - {message}" @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)