凌晨两点看线上日志时,屏幕前的人,和当初写下那行代码的人,往往已经不是同一个人了。

就算还是同一个人,中间也隔着几个月的时间、早就丢失的上下文,以及所剩不多的耐心。那一刻才会明白,日志不是程序运行时顺手留下的痕迹,而是写给未来某个陌生人的信。

一句 request failed,基本等于什么也没说。

真正有用的日志,至少应该让人看明白几件事:当时系统正在做什么,操作的是哪个对象,流程走到了哪一步,为什么失败,后面会不会自动重试或恢复,以及接下来应该去哪里继续查。

当然,并不等于说日志什么都详尽写进去。

我们需要在关键边界上写日志:任务开始时、状态发生变化时、调用外部系统时、重试耗尽时,以及流程最终结束时。至于内部函数,尽量返回带语义的错误,让最懂业务上下文的那一层决定该怎么记录。

代码主要是写给机器执行的,日志却是写给人看的。

而且很多时候,是写给一个困在凌晨两点、急着恢复现场的人看的,此刻也很朴实的希望那个人永远不是我。