# PR #7072 完整报告

- 仓库：`PaddlePaddle/FastDeploy`
- 标题：[Feature] Update logging
- 合并时间：2026-03-30 11:20
- 原文链接：http://prhub.com.cn/PaddlePaddle/FastDeploy/pull/7072

---

# 执行摘要
此 PR 更新了 FastDeploy 的 Go router 日志功能，通过添加 trace ID 和 request ID 到日志上下文和错误响应，增强了系统的可追踪性和调试能力，属于常规改进，无重大争议。

# 功能与动机
此变更的动机源于提升日志追踪能力，尽管 PR body 未详细说明，但从代码推断，目的是在 API 处理中引入更细粒度的标识符，如从请求头提取 X_BD_LOGID 作为 trace ID 和从 rawReq 提取 req_id，以便在日志和错误响应中关联请求，便于监控和问题定位。

# 实现拆解
实现主要集中在两个文件：
- `fastdeploy/golang_router/internal/gateway/completions.go`：在 `CommonCompletions` 函数中，添加了以下逻辑：
 - 提取请求头中的 X_BD_LOGID 作为 trace ID，并设置到 context。
 - 从 rawReq 提取 req_id 和 session_id，同样注入 context。
 - 更新所有错误响应，将 `request_id` 包含在 JSON 输出中，例如：
    ```go
    c.Writer.Write([]byte(fmt.Sprintf(`{"error": "Failed to select worker pair: %v", "request_id": "%s"}`, err, requestID)))
    ```
- `fastdeploy/golang_router/pkg/logger/logger.go`：新增了常量 `TraceIDKey` 和 `ReqIDKey`，并更新了 `contextPrefix` 函数，使其在生成日志前缀时包含这些 IDs：
  ```go
  if tid, ok := ctx.Value(TraceIDKey).(string); ok && tid != "" {
    prefix += "[trace_id:" + tid + "] "
  }
  ```

# 评论区精华
审核过程简单，两位审核者均快速批准。EmmonsCurse 的评论 'LGTM～ Skip check for Go.' 表明变更针对 Go 部分，无需额外检查，无深度讨论或设计权衡。

# 风险与影响
- **技术风险**：若请求头缺失 X_BD_LOGID，trace ID 可能为空，降低日志追踪效果；错误响应格式变更可能破坏下游系统兼容性。
- **影响范围**：用户受益于错误响应中的 request_id，系统日志更易于监控，团队需确保新增 context keys 不干扰其他模块。

# 关联脉络
此 PR 是独立的日志改进，未直接关联近期历史 PR。FastDeploy 仓库中其他 PR 如 #7042 涉及 APIServer 修改，但功能不同，本 PR 专注于 Go router 的日志增强，反映了项目对可观察性的持续投入。