执行摘要
本 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 涉及环境变量清理,显示团队对配置管理的重视,可视为间接关联。
参与讨论