示例成品 · 平台演示,按左边这组点选真跑出来的
别从头看日志。按这5步过滤 payment-gateway 的 FeignException:
1. 抓 TraceID/RequestID 首次出现位置
搜:`grep -nE "TraceID|traceId|X-Request-Id|requestId" payment-gateway*.log | head -n 20`
记下:值、时间、所在类。
判断:
- 首次出现是网关入口 Filter/Controller → 请求已进 payment-gateway,问题大概率在下游。
- 首次出现只在 Feign 异常栈 → 入口没打日志或上游没传,先查上游。
2. 按 TraceID 拉上下游调用链
用这个 TraceID 全局搜,按时间排序。
只保留:上游服务 → payment-gateway → 下游服务。
找第一个出现非 2xx、FeignException、timeout 的位置。
3. 提取 Feign 请求/响应片段
在异常前后 20 行内搜:`method`、`url`、`status`、`headers`、`body`、`request`、`response`。
记录:下游服务名、URL、HTTP 方法、状态码、耗时、脱敏后的 Header/Body 片段。
Body 没打印就写明“未打印 Body”。
4. 定根因类型
FeignException 对号入座:
- connect timeout / ServiceUnavailable → 下游不可达
- 500 InternalServerError → 下游业务报错,拿同一 TraceID 去下游查
- 429 / RetryableException / read timeout → 限流或响应慢
结论格式:payment-gateway 调 `<下游>` 失败,状态码 `<X>`,耗时 `<Y ms>`,指向 `<下游/网络/配置>`。
5. 故障报告直接写
[时间] TraceID=`<值>` 请求进入 payment-gateway;
[调用链] 上游 → payment-gateway → `<下游>`;
[失败点] Feign 调 `<下游>` 返回 `<状态码>`,异常摘要:`<...>`;
[请求片段] `<脱敏 Header/Body>`;
[根因] `<步骤4结论>`;
[复核] TraceID 首次出现位置为 `<入口/Feign栈>`,补日志/告警建议:`<...>`。
点左边「开工 · 直接出成品」,出一份你自己的版本(文字免费)