Initial project baseline
This commit is contained in:
@@ -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)
|
||||
Reference in New Issue
Block a user