让 CC 分析复杂报错日志
进阶实战教程:面对多段日志、多服务、CI 和线上混合错误时,让 Claude Code 先拆分事件链、识别第一处真实错误和连锁反应。
普通日志排查看一段错误就够了。
复杂报错日志不一样。它可能包含多服务、多时间点、多次重试、CI 输出、前端错误、后端异常、数据库错误混在一起。
和 让 Claude Code 根据日志排查问题 相比,这里处理的是复杂日志。重点不是急着定位单点,而是先拆事件链。
复杂日志的典型表现
- 日志很长,有多处 error。
- 前面一个错误导致后面一串失败。
- CI、构建、测试混在一起。
- 多服务日志时间线交叉。
- 线上日志经过脱敏,信息不完整。
- 错误时好时坏,不稳定复现。
第一步:让 CC 拆日志结构
请分析这组复杂日志,但不要直接给修复方案。 请先拆分: 1. 日志来源:前端、后端、数据库、CI、外部服务。 2. 时间顺序。 3. 第一处真实错误。 4. 后续哪些错误可能是连锁反应。 5. 哪些信息缺失。 6. 哪些结论不能确定。 日志如下: 【粘贴脱敏后的多段日志】
关键是找“第一处真实错误”,不是被最后一行带跑。
第二步:建立事件链
请把日志整理成事件链。 格式: 时间点 发生了什么 证据日志 可能原因 是否为根因候选
复杂日志不要直接猜根因,要先还原事件。
先统一日志口径
复杂日志经常来自不同系统,格式不统一。分析前先让 CC 统一口径:
| 项目 | 为什么重要 |
|---|---|
| 时间戳 | 判断哪个错误先发生 |
| 时区 | 避免把先后顺序看反 |
| 请求 ID | 串起同一次请求 |
| 服务名 | 区分前端、网关、后端、数据库 |
| 错误等级 | error、warn、info 不能混在一起看 |
| 重试次数 | 避免把重试失败当成多个根因 |
提示词:
请先统一这批日志的分析口径。 输出: 1. 每段日志的来源。 2. 时间格式和时区是否一致。 3. 是否能通过 request id / trace id 串联。 4. 哪些日志只是重试或连锁失败。 5. 当前不能确定的地方。
口径不统一时,后面的根因判断很容易错。
第三步:分离根因和噪音
请把这些错误分成三类: 1. 根因候选:可能真正导致问题。 2. 连锁错误:由前面错误引发。 3. 噪音或无关警告:暂时不影响本次问题。 每项都说明依据。
这一步能减少误修。
第四步:设计验证动作
请为前三个根因候选设计最小验证动作。 要求: 1. 每个验证动作成本尽量低。 2. 不修改生产数据。 3. 不执行高风险命令。 4. 能确认或排除一个假设。 5. 说明验证结果如何解读。
复杂日志不要一次改多个点。先验证假设。
不要让 CC 直接修最后一个错误
复杂日志里最后一个错误经常只是结果,不是原因。
比如:
| 最后一行错误 | 可能真正原因 |
|---|---|
| 前端请求 500 | 后端参数校验失败 |
| 数据库连接失败 | 配置读取失败或连接池耗尽 |
| 测试超时 | 前面构建产物缺失 |
| 权限 denied | token 过期或环境变量没注入 |
可以明确限制:
不要只根据最后一行错误给修复方案。 请找出日志中最早出现的异常信号,并说明它和最终错误之间的关系。
这个限制非常重要,能少走很多弯路。
什么时候需要补信息
如果日志不足,不要让 CC 硬猜。让它列缺口:
- 复现步骤。
- 完整时间窗口。
- 对应请求 ID。
- 最近一次代码改动。
- 环境变量是否变化。
- 依赖或部署是否刚更新。
- 同时间段其他服务是否异常。
补信息提示词:
当前日志不足以确定根因时,请只列还需要补充的信息。 要求: 1. 按优先级排序。 2. 说明每项信息能验证哪个假设。 3. 不要编造根因。 4. 不要直接建议改代码。
多服务日志注意事项
让 CC 对齐:
- 时间戳格式是否一致。
- 时区是否一致。
- 请求 ID 或 trace ID 是否一致。
- 同一个用户或任务是否跨服务。
- 是否有重试机制。
- 哪个服务最先报错。
提示词:
请根据 request id / trace id / 时间戳,对齐这些多服务日志,找出同一次请求的完整链路。
输出排查报告
请把复杂日志分析整理成排查报告。 结构: 1. 问题概述。 2. 日志来源。 3. 事件链。 4. 根因候选。 5. 连锁错误。 6. 缺失信息。 7. 最小验证动作。 8. 暂不建议做的修改。
验收结果
学完后,应该能做到:
- 不被最后一行错误带偏。
- 让 CC 拆分复杂日志来源。
- 找第一处真实错误。
- 区分根因、连锁错误和噪音。
- 先验证假设,再进入修复。