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)