fix(logging): 开发模式追加文件日志 backend.log

dev 模式 (uvicorn) logging.basicConfig 只有 StreamHandler, 同步/管道等
运行时日志 (daily_pipeline 的 logger.info 等) 仅出现在 dev 终端, 关掉或滚屏
后即丢失, 排查「同步后日志没落」时无处可查。

追加 RotatingFileHandler 落盘到 data/backend.log, 与桌面版
(desktop.py:_setup_logging → desktop.log) 行为对齐。frozen (桌面版) 已由
desktop.py 负责, 此处跳过避免重复落盘。RotatingFileHandler (10MB×3) 防止
长期运行/频繁 reload 导致文件无限增长。

注: 同步进度日志 (job_store JSON, 经 /api/pipeline/jobs 返回) 一直正常落盘,
本次只补应用级日志的文件落盘。
This commit is contained in:
shy3130
2026-08-14 13:40:57 +08:00
parent a0cb899163
commit eb869c7ad2
+23
View File
@@ -2,6 +2,7 @@
from __future__ import annotations
import logging
import sys
import threading
from contextlib import asynccontextmanager
from pathlib import Path
@@ -32,6 +33,28 @@ logging.basicConfig(
)
logger = logging.getLogger(__name__)
# 追加文件日志: uvicorn (含 --reload 开发模式) 默认只有 StreamHandler, 同步/管道等
# 运行时日志仅出现在 dev 终端, 关掉或滚屏后即丢失, 排查「同步后日志没落」时无处可查。
# 落盘到 data/backend.log 与桌面版 (desktop.py:_setup_logging → desktop.log) 行为对齐,
# 事后可查。桌面版 (frozen) 已由 desktop.py 写 desktop.log, 此处跳过避免重复落盘。
# RotatingFileHandler 防止长期运行/频繁 reload 导致文件无限增长。
if not getattr(sys, "frozen", False):
try:
from logging.handlers import RotatingFileHandler
_log_path = settings.data_dir / "backend.log"
_log_path.parent.mkdir(parents=True, exist_ok=True)
_file_handler = RotatingFileHandler(
_log_path, maxBytes=10 * 1024 * 1024, backupCount=3,
mode="a", encoding="utf-8", errors="replace",
)
_file_handler.setFormatter(
logging.Formatter("%(asctime)s [%(levelname)s] %(name)s: %(message)s")
)
logging.getLogger().addHandler(_file_handler)
except Exception as _e: # noqa: BLE001
logger.warning("文件日志初始化失败, 仅输出到终端: %s", _e)
@asynccontextmanager
async def lifespan(app: FastAPI):