如何确定打印日志等级

592 阅读3分钟

在我们平时工作中,除开正常的功能代码之外,还需要大量的异常处理以及日志代码。当需要打印日志的时候我们需要清除我们需要打印什么信息,需要打印什么日志级别,以什么格式打印日志?今天主要分享一下我们在打印日志是如何确定日志级别。 log4j定义了8个级别的log(出去OFF和ALL,可以说分为6个级别),分别为:

1、DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,就是输出debug的信息。一般自己单独调试的时候用的比较多。举个例子:假如从数据库里面取出所有的用户信息,放到一个List里面,如果想要查看每个用户的具体情况,一般使用log.debug()进行跟踪调试。只是为了加深对程序或者数据的理解,但是对线上运行没有实际的帮助就可以用debug。

2、INFO 表明消息在粗粒度级别上突出强调应用程序的运行过程,就是输出提示信息。程序启动、统计性、总结性信息或者运行过程中的提示性信息,比如程序初始化的时候,需要输出一下系统参数等,一般用info实现,还有刚才举得用户信息的例子,线上运行的时候只需要输出List大小等信息即可,此时用info。info级别监控系统运行情况,可以帮助程序员有效的了解程序的流转。(注意:索引资源组线上统一开启info级别日志)

3、WARN 概念比较模糊,很难确定界限,所以一般很少使用,使用最多的还是DEBUG 、INFO 、ERROR。

4、ERROR  指出虽然发生错误事件,但仍然不影响系统的继续运行。就是显示错误信息。举个例子,做除法运算的时候,要判断分母是否为零,所以要捕获异常,发生异常的时候log.error输出错误信息,并不影响程序的运行。

5、FATAL   指出每个严重的错误事件将会导致应用程序的退出。fatal用的场合也比较少,一般在程序发生不可逆转的错误或者朝着难以预计的方向运行用log.fatal(),注意,这个级别的日志还会导致程序的退出, 这个也算和error的一个区别,error只是输出错误日志,并不影响程序运行。

6、ALL level: 是最低等级的,用于打开所有日志记录。

7、OFF level: 是最高等级的,用于关闭所有日志记录。

8、TRACE:designates finer-grained informational events than the DEBUG. Since: 1.2.12,很低的日志级别,一般不会用。

Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。

在 ERROR、WARN、INFO、DEBUG 这四个日志级别中,我们最常用的是 INFO 和 ERROR,ERROR 很好理解就是出现错误了,换到 JAVA 代码中可能就是捕获了异常。那么是否是所有的异常我们都需要打印 ERROR 日志呢?我之前看到一个比较有意思的说法:

The "2AM rule" applies here- if you're on call, do you want to be woken up at 2AM if this condition happens? If yes, then log it as "error".

即当你作为一个系统的值班人员的时候,程序触发了一个条件,你是否应该在凌晨两点起来处理,如果答案是 Yes,那么你应该使用 ERROR 级别。 比如用户输入参数异常,导致代码执行抛出异常,这个时候需要打印 ERROR 吗?我觉的是不应该的。