关于日志分级的一些想法

日志分级这件事,几乎每个团队都有自己的约定,但真正落地的时候,往往又各自为政。常见的情况是:线上日志里全是 INFO,出了问题还是得一行行翻。

DEBUG 是给开发自己看的

DEBUG 应该在线上默认关闭,这一点没什么争议。但很多人会把它当成"详细的 INFO",于是写了很多其实只在本地有用的东西。

我的建议是:DEBUG 只保留两类内容,一类是入参和出参,一类是中间状态。它们的作用是让你在本地复现问题时不用再加打印。

INFO 是给运维看的

INFO 应该记录"系统发生了什么",而不是"代码执行到了哪里"。区分这两者很简单:如果一条日志里出现了函数名,那它大概率不属于 INFO。

一个粗糙的判断标准:把 INFO 日志全部打印出来,一个人能不能只看这些就大致还原出系统的行为轨迹。如果不能,说明 INFO 太少;如果一屏都放不下,说明太多。

WARN 和 ERROR 的边界

WARN 表示"可以自己恢复,但值得关注",ERROR 表示"这次请求失败了"。两者的分界线是:有没有影响到用户。

最常见的误用是把重试成功的情况记成 ERROR。这样一来,告警就被稀释了,真正的问题反而容易被淹没。

结构化比级别更重要

级别的意义在于过滤,而过滤的前提是字段一致。如果每条日志都是自由文本,那再合理的分级也很难在检索时发挥作用。

所以与其在级别上纠结,不如先把字段固定下来:时间、服务、请求 ID、耗时、结果。剩下的内容放正文里,需要的时候再解析。

← 返回首页