执行摘要
此 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 的日志增强,反映了项目对可观察性的持续投入。
参与讨论