目标
一次重构悄悄丢掉了日志中的 request id,破坏了生产中的关联能力却没有任何测试发现。本配方通过注入日志汇聚点捕获日志行并解析为对象,再按字段断言必要信息(层级、请求 id、状态码);提醒时间戳用匹配器断言存在与格式,而非精确值。
步骤要点
- 注入日志汇聚点捕获日志行为对象。
- 按字段断言必要信息而非子串。
- 用匹配器断言时间戳存在与格式。
- 重构后确认缺字段会失败、改文案不失败。
const logs = [];
const sink = { write: (s) => logs.push(JSON.parse(s)), end: () => {} };
await handler(req, res, sink);
排错提示
- 日志未被捕获通常是直接读全局 stdout。
- 时间戳精确相等会导致脆弱。
- 不校验日志内容的语义。
适用边界
- 需要结构化日志。
- 捕获钩子增加测试设置。