Log4j2基本使用入门

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Log4j2基本使用入门相关的知识,希望对你有一定的参考价值。

参考技术A Apache Log4j 2是日志框架Log4j的升级,
它比其前身Log4j 1.x提供了重要的改进,
并且参考了Logback中许多有用的改进,
同时修复了Logback的一些固有问题。
详细请参考官网: Apache Log4j 2
本文介绍Log4j2的常用功能,
给出相应功能的参数配置方法,
最后给出一个完整的log4j2.xml配置文件,
作为工作开发中常用的日志配置参考。

在Maven的父工程pom.xml添加如下依赖:

在Maven的父工程pom.xml添加如下依赖管理:

然后在使用Log4j2的子工程pom.xml添加如下依赖,
这样就不用写具体的版本号了,
保证项目的子工程都使用相同版本的Log4j2。

在复杂场景下,可能不止依赖上面两个jar包,
这种方法可以保证Log4j2模块之间的版本一致。

为了演示Log4j2的功能,创建如下的测试类:

运行上面的测试程序,
在控制台打印出如下日志:

可以看到ERROR报错了,没有找到Log4j2的配置文件,
使用了默认配置,只打印error级别日志到console控制台,
然后控制台输出了error和fatal两个级别的日志信息。

Log4j2共有8种日志级别,
按照优先级从小到大排序:

当日志级别设置为某一级别时,
则会打印大于等于该级别的日志,
比如日志级别设置为ERROR,
则会打印ERROR,FATAL级别的日志。
ALL会把所有级别的日志打印出来,
OFF不会打印任何级别的日志,
所以严格来讲只有6种日志级别。

Log4j2能够在初始化期间自动配置,
它支持4种格式的配置文件:
Properties, YAML, JSON, XML
并且按从高到低的加权顺序查找配置文件。

Log4j2启动时,首先检查系统属性log4j.configurationFile,
如果设置了该属性,则匹配文件扩展名去加载配置文件,
就是说文件名可以是任意的,文件扩展名必须是上面的4种之一。
在启动应用时配置该参数,示例如下:

log4j.configurationFile可以配置如上的绝对路径,
也可以配置相对路径,即只配置文件名myLog4j2.xml,
Log4j2会在classpath路径中查找配置文件。

如果没有设置系统属性,
则在classpath路径中按照顺序查找如下4个文件:

如果找不到上面的文件,
则在classpath路径中按照顺序查找如下4个文件:

如果无法找到任何配置文件,
则使用默认配置文件,
这将导致日志输出到控制台。

在第4步中打印日志找不到配置文件,
使用的默认配置等价于下面的配置:

在上面的默认配置文件中,
主要有两类配置,
一类是Appenders:定义日志输出目的地,内容和格式等。
另一类是Loggers:定义日志级别和使用的Appenders。

表示日志输出到控制台的标准输出。

pattern定义日志输出格式:

实际会输出如下日志:

更多的PatternLayout设置请参考官网:
Log4j2 PatternLayout

新建log4j2.xml文件,
添加上面第7步的默认配置,
放到classpath路径下,
则应用启动时会读取该文件,
下面以该xml文件为例,
通过修改相应的配置,
演示Log4j2的功能。

实际上Log4j2的配置可以通过以下四种方式中的一种来完成:

本文主要介绍第1种,
详解XML格式文件的编写配置。

Log4j2内部日志可以输出到控制台,
status控制Log4j2内部日志的输出级别,
它的值可以填第5步中的日志级别,
Log4j2会输出初始化、翻转和其他内部操作的详细信息。
设置status="TRACE"对定位Log4j2问题非常有用。

也可以设置系统属性log4j2.debug,
也会将Log4j2内部日志打印到控制台,
包括在找到配置文件之前发生的内部日志。
在启动应用时配置该参数,示例如下:

Log4j2能够自动检测配置文件的修改,
并且自动重新加载配置。
通过在Configuration元素上配置monitorInterval属性,
并将其设置为非零值,
那么在下一次计算或记录日志事件,
且自上次检查以来已经超过monitorInterval时间,
则将检查该文件是否被修改。
注意时间单位默认为秒,
而且最小时间间隔是5秒。

如上示例为每隔至少5秒检查一次配置文件,
如果配置文件有变化则自动重新加载。

这里增加了一个类型为File的Appender,
name为File,
FileName为test.log,
表示日志会打印到test.log文件。

这里增加了一个Logger,需要配合上面的Appender使用,
name为Log4j2Test的包路径org.apache.logging.log4j,
level日志级别为EEROR,
AppenderRef指向了上面新增的名称为File的Appender,
表示Log4j2Test的ERROR和FATAL级别的日志会打印到test.log,
test.log文件内容:

同时additivity设置为true,
会将当前的Logger特性会传递给Root,
即上述的日志不仅会输出到test.log文件,
也会输出到Root指向的控制台,
Console控制台内容:

可以看到和上面文件中的内容一模一样。

Log4j2 入门教程
Log4j2 配置文件
Log4j2 Appenders
Frequently Asked Questions

以上是关于Log4j2基本使用入门的主要内容,如果未能解决你的问题,请参考以下文章

Log4j2进阶使用(按大小时间备份日志)

SpringBoot入门三,添加log4j2支持

log4j2的基本使用

Log4j2完整XML参考(详细注释说明)

log4j2.xml基本配置

Log4j2的正确使用姿势