优化日志与启动调试脚本
This commit is contained in:
@@ -2,7 +2,9 @@
|
||||
|
||||
import os
|
||||
import sys
|
||||
import logging
|
||||
from datetime import date
|
||||
from logging.handlers import TimedRotatingFileHandler
|
||||
from pathlib import Path
|
||||
|
||||
from loguru import logger
|
||||
@@ -24,6 +26,30 @@ def _should_rotate(message, file):
|
||||
return False
|
||||
|
||||
|
||||
def _configure_standard_logging(level: str, log_dir: Path) -> None:
|
||||
"""将 Uvicorn/FastAPI 的标准日志同步到控制台和文件。"""
|
||||
log_level = getattr(logging, level.upper(), logging.INFO)
|
||||
formatter = logging.Formatter(
|
||||
"%(asctime)s | %(levelname)-8s | %(name)s | %(message)s"
|
||||
)
|
||||
|
||||
console_handler = logging.StreamHandler(sys.stdout)
|
||||
console_handler.setLevel(log_level)
|
||||
console_handler.setFormatter(formatter)
|
||||
|
||||
file_handler = TimedRotatingFileHandler(
|
||||
log_dir / "server.log", when="midnight", backupCount=7, encoding="utf-8"
|
||||
)
|
||||
file_handler.setLevel(log_level)
|
||||
file_handler.setFormatter(formatter)
|
||||
|
||||
for name in ("uvicorn", "uvicorn.error", "uvicorn.access", "fastapi", "starlette"):
|
||||
standard_logger = logging.getLogger(name)
|
||||
standard_logger.handlers = [console_handler, file_handler]
|
||||
standard_logger.setLevel(log_level)
|
||||
standard_logger.propagate = False
|
||||
|
||||
|
||||
def setup_logger(level: str = "INFO", log_dir: str = None, log_file: str = None) -> None:
|
||||
"""
|
||||
配置日志
|
||||
@@ -52,6 +78,7 @@ def setup_logger(level: str = "INFO", log_dir: str = None, log_file: str = None)
|
||||
# 新接口:按目录 + 日期命名
|
||||
dir_path = Path(log_dir)
|
||||
dir_path.mkdir(parents=True, exist_ok=True)
|
||||
_configure_standard_logging(level, dir_path)
|
||||
file_path = str(dir_path / "app-{time:YYYY-MM-DD}.log")
|
||||
elif log_file:
|
||||
# 兼容旧接口
|
||||
|
||||
Reference in New Issue
Block a user