结构化日志该不该用:先看它解决的问题是不是你的问题
多行堆栈在容器日志里会被拆成多条,采集端要配 multiline 才能合回去
它擅长的是跨服务问题定位;如果你只是按 trace 还原请求,用现成的东西更省事。
先说结论
结构化日志的核心不是 JSON,是「字段名先说好」,格式统一比工具重要
- 适合:跨服务问题定位
- 不适合:审计与统计
- 学习成本:时间戳统一用 UTC 毫秒,本地时区只在展示层转,能省掉一半对时问题
- 最大收益:trace_id 要在入口生成并透传,缺了它跨服务排查只能靠时间猜
- 最大风险:日志里拼中文句子,想按字段统计时只能正则硬抠
它到底解决什么
多行堆栈在容器日志里会被拆成多条,采集端要配 multiline 才能合回去。
换句话说,它把「跨服务问题定位」这件事从手工变成可重复的流程。这是它真正的价值,而不是功能列表的长度。
什么时候不该用
下面三种情况,用了反而更累:
日志里拼中文句子,想按字段统计时只能正则硬抠
生产长期开着 debug,一周写满 200GB
异常只打 message 不打堆栈,出问题时不知道哪一行
和替代方案比
debug 全量打开时日志量能涨 5-10 倍,磁盘往往先满。
| 方案 | 上手成本 | 适用规模 | 代价 |
|---|---|---|---|
| 结构化日志 | 中等 | 中大型 | 需要维护 |
| 纯文本日志加 grep | 低 | 小型 | 定制能力弱 |
| 直接打点到追踪系统 | 低 | 一次性任务 | 不可维护 |

这台工具的关键细节
几个决定长期体验的点:
- 时间戳统一用 UTC 毫秒,本地时区只在展示层转,能省掉一半对时问题
- trace_id 要在入口生成并透传,缺了它跨服务排查只能靠时间猜
- debug 全量打开时日志量能涨 5-10 倍,磁盘往往先满
- 把手机号、身份证写进日志,等于给自己造了一个合规问题
我的建议
结构化日志的核心不是 JSON,是「字段名先说好」,格式统一比工具重要。
先用两周,跑一个真实的小任务;两周后你还想用它,再谈长期。
还有几处容易忽略的
都是小地方,但出问题时往往就卡在这里。
- 字段名不统一(uid/userId/user_id)会让查询条件永远写不全
工具是解法,不是身份。
评论 (3)
备份没验证过等于没有,这条我认。
排查顺序那段直接抄进值班手册了。
「先看日志再猜」这句话值一篇文。
发表评论