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,很低的日志级别,一般不会用。
如果将log level设置在某一个级别上,那么比此级别优先级高的log都能打印出来,例如,如果设置优先级为WARN,那么OFF、FATAL、ERROR、WARN 4个级别的log能正常输出,而INFO、DEBUG、TRACE、 ALL级别的log则会被忽略。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
从实验的结果可以看出,log4j默认的优先级为ERROR或者WARN(实际上是ERROR)。
日志记录器(Logger)的行为是分等级的。如下所示:
分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。
程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。如果设置级别为INFO,则优先级高于等于INFO级别(如:INFO、WARN、ERROR)的日志信息将可以被输出,小于该级别的如DEBUG将不会被输出。
注意事项:
1、 ERROR信息必须同时打印日志和堆栈信息。
2、 线上日志统一设置为INFO级别。
3、 线上日志按照天或者小时拆分。
4、 日志存放目录采用相对路径。
5、 日志打印输出文件的大小。