1. 添加依赖
在一般项目中使用Log4j2至少需要引用log4j-api-2.x和log4j-core-2.x这两个jar包(老版本),现在只需引入以下一个依赖即可,但是如果想桥接至slf4j,需要额外依赖(两者关系参考另一文章Java日志框架:slf4j作用及其实现原理)
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.0</version>
</dependency>
<!-- slf4j与log4j之间的桥接包-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
在spring boot项目中使用Log4j2
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<!-- 排除spring boot默认日志logback -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<!--同时引入这两个依赖时,因为该jar依赖于前者,所以只需在前者中排除掉自带的logging依赖即可 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入log4j2依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
依赖添加完成后,我们看一下都有什么jar包
第一个jar的作用是将log4j2与slf4j之间的桥接包,起绑定作用
第二个以及第三个是log4j2的核心包
第四个是java.util.logging.Logger与slf4j之间的桥接包
2. 添加配置文件
配置文件的加载主要逻辑在ConfigurationFactory这个类中,类容较多,能力有限不做过多分析,如深究,建议从
org.apache.logging.log4j.core.LoggerContext中start方法开始debug跟。
package org.apache.logging.log4j.core.config;
// **************略****************
public abstract class ConfigurationFactory extends ConfigurationBuilderFactory {
public ConfigurationFactory() {
super();
// TEMP For breakpoints
}
/**
* Allows the ConfigurationFactory class to be specified as a system property.
*/
public static final String CONFIGURATION_FACTORY_PROPERTY = "log4j.configurationFactory";
/**
* Allows the location of the configuration file to be specified as a system property.
*/
public static final String CONFIGURATION_FILE_PROPERTY = "log4j.configurationFile";
配置文件可以手动指定,但我们通常的选择是只提供文件,让log4j自己去找,log4j有默认的5个格式工厂
static List<ConfigurationFactory> getFactories() {
return factories;
}
每个工厂支持一个或多个后缀,分别是{.properties},{.yml以及.yaml},{.jsn以及.json},{.xml以及*},{.springBoot}
如果什么都没配置,springBoot项目中会自动生成一个默认配置。