# logging_config.py import logging import logging.config from pathlib import Path # 确保 logs 目录存在 log_dir = Path("logs") log_dir.mkdir(exist_ok=True) LOGGING_CONFIG = { "version": 1, "disable_existing_loggers": False, "formatters": { "default": { "format": "%(asctime)s - %(name)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s", }, "detailed": { "format": "%(asctime)s - %(name)s - %(levelname)s - %(funcName)s - %(message)s", } }, "handlers": { "console": { "class": "logging.StreamHandler", "level": "INFO", "formatter": "default", "stream": "ext://sys.stdout" }, "file": { "class": "logging.handlers.RotatingFileHandler", # 自动轮转 "level": "INFO", "formatter": "detailed", "filename": "logs/sqlbot.log", "maxBytes": 10485760, # 10MB "backupCount": 5, # 保留5个备份 "encoding": "utf8" }, }, "root": { "level": "INFO", "handlers": ["console", "file"] }, "loggers": { "uvicorn": { "level": "INFO", "handlers": ["console", "file"], "propagate": False }, "uvicorn.error": { "level": "INFO", "handlers": ["console", "file"], "propagate": False }, "uvicorn.access": { "level": "WARNING", # 只记录警告以上,避免刷屏 "handlers": ["file"], # 只写入文件 "propagate": False } } } # 应用配置 logging.config.dictConfig(LOGGING_CONFIG)