曾记得有一次去面试的时候,面试官问我Log4j的日志级别,我都没能说出来,扯着扯着换下一个话题了。如今在工作中切身感受到了日志的方便性,于是就准备记录一下。

Log4j中有三个主要组成部分:

Log4j特性: (官网介绍)

  • loggers: 负责捕获记录信息。
  • appenders : 负责发布日志信息,以不同的首选目的地。
  • layouts: 负责格式化不同风格的日志信息。
  • Log4j的是线程安全的
  • Log4j是经过优化速度的
  • Log4j是基于一个名为记录器的层次结构
  • Log4j的支持每个记录器多输出追加器(appender)
  • Log4j支持国际化。
  • Log4j并不限于一组预定义的设备
  • 日志行为可以使用配置文件在运行时设置
  • Log4j设计从一开始就是处理Java异常
  • Log4j使用多个层次,即ALL,TRACE,DEBUG,INFO,WARN,ERROR和FATAL
  • 日志输出的格式可以通过扩展Layout类容易地改变
  • 日志输出的目标,以及在写入策略可通过实现Appender程序接口改变
  • Log4j会故障停止。然而,尽管它肯定努力确保传递,log4j不保证每个日志语句将被传递到目的地。

 这里要介绍的主要是第一部分,更具体的是关于日志级别的介绍。

  • DEBUG:这个级别最低的东东,一般来说,在实际运行过程中,都是不输出的。因此,这个级别的信息,可以 随意的调用,任何觉得有利于在调试时更详细的了解系统运行状态的信息,比如变量的值等,都可以输出查看。当然,在每一个debug之前,都要进行if的判断。
  • INFO:这个应该用来反馈系统的当前状态给最终用户的,所以,在这里输出的信息,应该对最终用户具有实际意义,也就是最终用户要能够看懂是什么意思才行。从某种角度上说,info输出的信息需要看成是软件产品的一部分(就像交互界面上的文字一样),所以需要谨慎对待,不可随便。
  • WARN、ERROR、FATAL:警告、错误、严重错误,这三者应该都在系统运行时检测到了一个不正常的状态,他们之间的区别大致是这样的:

 也就是说,选择Error、Warn、Fatal中的哪一种,是根据当前这个问题对以后可能产生的影响而定的,如果对以后没有什么影响,警告就行,如果肯定以后会出现严重的问题,就Fatal,拿不准会怎样,Error就可以了。

Log4j 漏洞复现 使用docker镜像_最终用户

  1. 所谓警告,应该是这个时候进行一些修复性的工作,应该还可以把系统恢复到正常状态中来,系统应该可以继续运行下去。
  2. 所谓错误,就是说可以进行一些修复性的工作,但是无法确定系统会正常的运行下去,系统以后的某个阶段,很有可能会因为当前这个问题,导致一个无法修复的问题(宕机),但也可能一直工作到停止也不出现问题。
  3. 至于Fatal,那就是相当严重了,可以肯定这种错误已经无法修复,并且系统如果继续运行下去的话,可以肯定必然会越来越乱,这时候采取的最好措施不是试图将系统恢复到正常状态,而是尽可能的保留系统有效数据并停止运行。

关于log4j的另外两个组成,项目中还没 没有遇到过,就先不研究了。