# PR #7098 完整报告

- 仓库：`PaddlePaddle/FastDeploy`
- 标题：[Feature] Add logging parameters and error output to terminal
- 合并时间：2026-04-01 13:18
- 原文链接：http://prhub.com.cn/PaddlePaddle/FastDeploy/pull/7098

---

# 执行摘要
本 PR 作为 FastDeploy 日志系统优化的开端，新增了多个日志环境变量并优化了日志输出分流，将 INFO/DEBUG 日志定向到 stdout，ERROR/CRITICAL 定向到 stderr，同时改进 Worker 启动失败的错误展示，提升调试效率。

# 功能与动机
针对 FastDeploy 的日志系统进行优化，计划分 4 个 PR 完成。当前 PR 是第一部分，旨在新增日志相关参数和错误同时输出到终端，解决调试时日志信息不直观的问题，提升系统可观测性。PR body 中明确说明：" 针对 FastDeploy 的日志系统进行优化，预计分 4 个 pr 完成。"

# 实现拆解
- **环境变量新增**：在 `fastdeploy/envs.py` 和文档中添加 `FD_LOG_LEVEL`、`FD_LOG_REQUESTS` 等环境变量，为日志配置提供基础。
- **日志输出分流**：在 `fastdeploy/logger/setup_logging.py` 中引入 `MaxLevelFilter` 类，并配置 `console_stdout` 和 `console_stderr` handlers，实现按级别分流。
- **错误处理优化**：在 `fastdeploy/engine/common_engine.py` 中新增 `_read_latest_worker_traceback` 和 `_format_worker_launch_failure_message` 函数，读取 workerlog.* 文件中的 traceback 并格式化错误消息。
- **逻辑修改**：修改 `fastdeploy/engine/engine.py` 和 `common_engine.py` 中的 `_stop_profile` 等方法，将错误信息输出到终端而非仅记录日志。
- **目录确保**：在 `fastdeploy/logger/handlers.py` 中为 `DailyRotatingFileHandler._open()` 添加 mkdir，确保日志目录存在。
- **测试覆盖**：新增和修改多个测试文件，如 `tests/engine/test_common_engine.py` 和 `test_engine.py`，验证功能正确性。

# 评论区精华
Review 中仅有一条评论，Jiang-Jia-Jun 指出 " 使用英文注释 "，强调代码风格的国际化一致性。讨论简单，无其他争议。

# 风险与影响
- **风险**：新增环境变量当前未生效（需后续 PR 启用），可能引起用户混淆；Worker 错误处理依赖文件系统，存在文件访问风险；日志分流可能影响现有日志收集流程；测试覆盖率为 82.5%，有未覆盖代码行。
- **影响**：为用户提供更灵活的日志配置和清晰的错误输出，便于调试；对系统优化日志显示，ERROR 日志直接输出到 stderr 有助于快速排查问题；为团队标准化日志参数，但需注意后续迁移旧参数。

# 关联脉络
作为日志系统优化的第一部分，本 PR 为后续 PR（如日志通道划分、请求日志级别划分等）奠定基础。在历史 PR 中，虽无直接相关日志 PR，但近期 PR 如 #7052 涉及环境变量清理，显示团队对配置管理的重视，可视为间接关联。