Initial project baseline

This commit is contained in:
2026-07-04 02:40:45 +08:00
commit d5d8caef2f
86 changed files with 15590 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
"""
后端日志配置模块。
提供统一的日志格式和两个 handler:
- console: 输出到控制台(uvicorn 可见)
- file: 输出到 backend/.runtime/service.log
"""
import logging
import sys
from pathlib import Path
_LOG_DIR = Path(__file__).resolve().parent.parent / ".runtime"
_LOG_DIR.mkdir(parents=True, exist_ok=True)
_LOG_FILE = _LOG_DIR / "service.log"
_FORMAT = "%(asctime)s | %(levelname)-7s | %(name)s | %(message)s"
_DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
def setup_logging(level: int = logging.DEBUG) -> None:
"""配置全局日志,可重复调用(幂等)。"""
root = logging.getLogger()
if root.handlers:
return # 已配置过
root.setLevel(level)
console = logging.StreamHandler(sys.stdout)
console.setLevel(logging.INFO)
console.setFormatter(logging.Formatter(_FORMAT, datefmt=_DATE_FORMAT))
file_handler = logging.FileHandler(str(_LOG_FILE), mode="a", encoding="utf-8")
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(logging.Formatter(_FORMAT, datefmt=_DATE_FORMAT))
root.addHandler(console)
root.addHandler(file_handler)
def get_logger(name: str) -> logging.Logger:
"""获取命名 logger,自动触发 setup。"""
setup_logging()
return logging.getLogger(name)