日志只需要三种级别:normal、error、debug。
其中normal用来记录一般性的程序运行信息,error用来记录必须处理的错误信息,debug用来记录详细的调试信息。程序普通运行的时候只开normal和error日志;当需要追踪问题的时候再开debug日志。
这分别代表了我们能够做出的三种反应:日常查看状态(normal)、发现需要关注解决的问题(error)、调试分析问题(debug)。
因为我们只能对日志做出这三种反应,因此日志只应该被分成这三个级别。
java里面的日志是被分成九个级别的,那基本上只造成了混乱。比如warning级别,这纯粹是扯淡,没人知道该怎么处理warning,是必须处理掉,还是不用处理?在现实世界里,所有warning实际上都会被无视,变得无意义。
作为佐证,我曾经见过某大公司的一些java项目,那些项目的日志都乱七八糟,因此日常维护的时候也基本上都忽略了所有日志。之所以大多数程序员都不知道该怎么写日志,是因为他们缺乏一个可执行的指引:什么信息该写哪个类型的日志。经常有程序员会把必须处理的错误写在warning里面,导致error日志不能覆盖所有必须处理的错误,从而使得监控error日志变得无意义。
之所以日志必须只分为三个级别,是为了能给程序员提供一份清晰的指引:凡是需要处理的错误,都必须写error日志;其他信息都写normal,而normal信息都是不用处理的,不影响系统运行的;调试信息写debug。
Q:当收到一个异常的request的时候,是否需要写error日志?
A:如果这个异常request是预期之内的,则写normal日志;如果这个request是需要程序员或者运维人员进行处理的,则写error日志。
Q:当系统启动失败的时候,应该写什么日志?
A:启动失败是不应该的,需要运维人员至少看看为什么。因此需要写error日志。
Q:当系统内部buffer队列满了的时候,应该写什么日志?
A:在设计正确的系统里面,正常情况下不应该出现buffer满了的情况。这种情况需要程序员改代码或者运维改配置。因此需要写error日志。