Skip to content

回放发送日志标记 ​

后端回放一个用例时,在把录制下来的入口请求发给你的服务之前打一行日志,拿到结果后再打一行。看这两行,就知道失败的用例到底有没有打到你的应用。

这些标记只在后端直接通过 HTTP 发送请求时出现。应用开着 sp tunnel 时,请求走隧道,后端打的是 [TUNNEL] … 日志,没有这些标记。

按用例的 traceId 查日志时(见 sp logs),它们是 source 为 backend 的行,service_name 一般是 sp-backend。关联正常时,日志内容里的 recordedTraceId 与这行的 trace_id 相同。

日志开头 ​

开头级别含义
Replay send start:INFO马上要发送录制的入口请求
Replay send done:INFO收到了响应,带状态码和耗时
Replay send failed:WARN没有拿到成功的响应:连接失败、超时,或服务返回了 4xx/5xx
Replay send slow:WARN请求耗时超过 10 秒(在 done 之后打出)

开头后面是用逗号分隔的 键=值(普通文本,不是 JSON)。

字段 ​

字段出现在说明
planIdstart、done、failed、slow回放计划 ID
targetEnvstart、done、failed请求发往回放目标地址(--env / targetEnv)时为 true
method全部HTTP 方法(GET、POST 等)
url全部实际调用的完整地址,含查询参数
recordedTraceIdstart、done、failed录制时的 trace ID
spanIdstart、done、failed发送时所在的 span ID
httpStatusdone、faileddone 时为响应状态码;failed 时一律为 -1
durationMsdone、failed、slow请求耗时,单位毫秒
errorfailed错误信息。服务返回 4xx/5xx 时,状态码写在这里(如 500 Internal Server Error)

示例 ​

text
Replay send start: planId=6a3f2aad59f0c4655b0f99da, targetEnv=true, method=POST, url=http://order-service.test:8080/api/orders, recordedTraceId=2057ad46a7ce03d3955385f2a4142d29, spanId=8d10c94a2a6f4e11

Replay send done: planId=6a3f2aad59f0c4655b0f99da, targetEnv=true, method=POST, url=http://order-service.test:8080/api/orders, recordedTraceId=2057ad46a7ce03d3955385f2a4142d29, spanId=8d10c94a2a6f4e11, httpStatus=200, durationMs=142

Replay send failed: planId=6a3f2aad59f0c4655b0f99da, targetEnv=true, method=POST, url=http://order-service.test:8080/api/orders, recordedTraceId=2057ad46a7ce03d3955385f2a4142d29, spanId=8d10c94a2a6f4e11, httpStatus=-1, durationMs=30001, error=Connection refused

怎么用 ​

  1. 从 sp replay case list --plan <planId> --failed --json 取失败用例的 traceId。
  2. 查它的日志(见 排查回放失败 — 查看日志)。
  3. 留下 source=backend、body 以 Replay send 开头的行。
看到的情况可能的原因
没有 Replay send start请求走了 sp tunnel(看有没有 [TUNNEL] 日志),或者用例还没走到发送这一步:看回放计划的状态(可能被停止了,或在准备阶段就失败了)
有 start,没有 done 或 failed请求可能还在进行,或时间窗太窄,放宽时间窗再查
failed,error 是连接失败或超时后端连不上目标服务。检查 --env 地址、域名解析、防火墙,以及服务是否在运行
failed,error 以 4xx/5xx 状态码开头服务返回了错误。看 start 之后 Agent 和应用的日志
done 且状态码为 2xx,但用例仍然失败请求已经打到服务,问题在响应内容或 Mock 上,去看差异

同一个请求出问题时,经常还能看到下面几行:

开头级别含义
Replay send error:ERROR发送失败时的异常堆栈(跟在 Replay send failed 之后)
Replay send result invalid:ERROR收到了响应,但缺少读取回放结果所需的响应头

捕获 Session · 审查 Steps · 改进关键所在