"""轻量日志配置。 单体版所有节点在 API 主进程内运行,这里把节点运行日志直接输出到主进程 控制台(uvicorn 的 stderr),便于观察各节点的执行过程与耗时。 """ from __future__ import annotations import logging # 应用日志统一前缀,便于与其他库日志区分。 _APP_LOGGER_NAME = "vrsub" def _ensure_console_handler(logger: logging.Logger) -> None: """为日志器附加控制台输出;已配置过则跳过,避免重复打印。""" if any(isinstance(handler, logging.StreamHandler) for handler in logger.handlers): return handler = logging.StreamHandler() handler.setFormatter(logging.Formatter("%(asctime)s [%(levelname)s] %(message)s")) logger.addHandler(handler) logger.setLevel(logging.INFO) # 不向 uvicorn 根日志传播,防止消息重复输出。 logger.propagate = False def get_logger(name: str) -> logging.Logger: """获取并确保输出到主进程控制台的日志器。""" logger = logging.getLogger(f"{_APP_LOGGER_NAME}.{name}") _ensure_console_handler(logger) return logger