结构化日志(structured log) 核心概念
别名:
事件行
每个事件盖上全局序号与墙钟时间、序列化为一行可排序可检索的结构化记录(如 JSON)。与普通 print 日志相比,它带归属与次序,是聚合出 trace 的「砖」。见[第 20 章](/chapters/20-observability-v07/)。
它是什么
结构化日志(structured log)指把每个事件盖上有归属、有序次的元数据,再序列化为一行可机器解析的记录(典型是 JSON)。第 20 章的做法是每个协议事件进来时盖两个戳:seq(全局递增序号,跨会话可比较先后)与 ts(墙钟时间,观测层看到该事件的时刻),产出形如 { type, sessionId, seq, ts, ... } 的事件行。与普通 print 日志相比,它的三个差别是决定性的:可检索(按字段过滤而不是正则抠字符串)、可排序(seq 是唯一权威次序)、带归属(sessionId 说明这一行属于哪次会话)。
与 trace 的关系
事件行是聚合出 trace 的「砖」:盖完章的事件按 sessionId 归组、按 seq 排序,就是一次运行的完整记录。所以日志与 trace 不是二选一,而是「行与运行」两层——这也是 OpenTelemetry 三支柱里 logs 与 traces 并存、并自动互相关联的原因。
关键设计:seq/ts 不进协议
盖章副本是观测层自己的视图:转发给 SSE 缓冲的是原始事件,wire 上跑的还是第 15 章定稿的事件,一个字节没改。可观测性是一层包在 onEvent 外面的观察者,不是协议的一部分——把 server 和 cli 删掉,core 照常跑、照常测。