from __future__ import annotations import logging from logging.handlers import RotatingFileHandler from pathlib import Path import uvicorn from .config import load_settings from .web import create_app def setup_logging(log_file: str) -> None: path = Path(log_file).resolve() path.parent.mkdir(parents=True, exist_ok=True) fmt = logging.Formatter("%(asctime)s | %(levelname)s | %(name)s | %(message)s") root = logging.getLogger() root.setLevel(logging.INFO) root.handlers.clear() fh = RotatingFileHandler(path, maxBytes=10 * 1024 * 1024, backupCount=5, encoding="utf-8") fh.setFormatter(fmt) sh = logging.StreamHandler() sh.setFormatter(fmt) root.addHandler(fh) root.addHandler(sh) def build_app(config_path: str = "config.yaml"): settings = load_settings(config_path) setup_logging(settings.app.log_file) return create_app(settings) app = build_app() if __name__ == "__main__": settings = load_settings("config.yaml") setup_logging(settings.app.log_file) uvicorn.run( "app.main:app", host=settings.app.host, port=settings.app.port, workers=1, log_level="info", )