1. Log级别

参考下列表格

Log级别

说明

用法

error

错误:系统运行错误,无法自行恢复,并且会影响到如下游系统或系统的使用者。一般需要人为干预才能恢复正常运行。

凌晨2点法则(2AM Rule):当发生这个错误时,你觉得有必要在2点熟睡之际叫醒的时候,log级别设为error。

warn

警告:系统运行异常,能自行恢复,继续运行。有可能异常会影响到使用者。但一般不需要立刻进行人为对应。这个警告需要被监控者审查,并判断其是否会影响到使用者。如果是,需要人为修正错误带来的影响

例如:I/O异常导致文件写入失败,重试后成功。 一般来说文件写入成功率可以人为是99.99%,但有一定的概率因小概率异常导致写入失败的时候需要设为Warn通知监控者(Monitor)排查这个异常出现的原因

info

信息:记录系统运行的情况。帮助我们了解该时间系统内哪些代码在运行中。

例如:系统的生命周期(Start up/Shut down),Session的生命周期(Login/Logout),某种数据的写入(Database call),远程API调用等。

debug

Debug:除开info之外的任何有助于追踪系统运行情况的信息,一般用于开发和QA环境

高层级API被调用的次数可以认为明显小于低层级API,比如一个批处理程序,处理1000w数据的时候,ProcessData(Data)这个低层次API会被调用1000w次。而ProcessData里也调用了其他3个private方法,如果我们在生产环境log全部的method start,end。会导致产生大量无用的Log。这些方法的进入和退出的log我们只希望在开发和QA环境下测试控制流的时候看到。

trace

详细信息(more detailed information)

这个非常不常用,一般debug已经会产生大量的log。而trace是连开发环境下少量数据的时候都不太愿意使用的。比如把一个对象的所有信息log出来等。假设你的程序是一个batch把文件里数据给导入到数据库,读入的时候log每一行数据,数据变换(mapping)的时候在log每一个变换后的数据。这个时候用trace。生产环境下一般只会log部分数据来定位处理的是那一条数据。

2. 总结

许多人认为只要把程序写好即可。诚然这没有错,但是如果想要写高质量高可维护的软件的时候,Log是必不可少的。有Log能帮助我们对程序运行的方式进行一次再现,而不是去找到使用者问他做了什么操作产生了错误。对于我们排查程序错误有着不可替代的作用。设计好的Log能让我们排查错误事半功倍。而设计不好的Log则能让你的接班者(后任开发/运维/异常排查人员/半年后的自己(误))想杀人。

在敏感的金融领域,任何系统异常都可能会导致大量的金钱损失。为了避免或者使损失降到最低,一般都会对Error/Warn级别的Log进行监控,一旦发生,就会有人去检查。正确使用Log级别,对提高系统的稳定性有着莫大的好处。