Apache Log4j2 详解,【高级 Java 架构师系统学习
[](
)引用依赖
在一般项目中使用 Log4j2 至少需要引用log4j-api-2.x
和log4j-core-2.x
这两个 jar 包。
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.12.0</version>
</dependency>
在 spring boot 项目中使用 Log4j2
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
小编在使用中遇到一些坑,同时引入 spring-boot-starter 和 spring-boot-starter-web 依赖时,需要在 spring-boot-starter 中排除 spring-boot-starter-logging 依赖,因为 spring-boot-starter-web 依赖于 spring-boot-starter,根据 Maven 依赖关系,在 spring-boot-starter 中排除 spring-boot-starter-logging 依赖才能排除成功。
[](
)添加配置文件
默认情况下,Log4j2 在 classpath 下查找名为log4j2.xml
的配置文件。你也可以使用 Java 启动命令指定配置文件的全路径。-Dlog4j.configurationFile=opt/demo/log4j2.xml
,你还可以使用 Java 代码指定配置文件路径
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.LoggerContext;
import java.io.File;
public static void main(String[] args) {
LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false);
File file = new File("opt/demo/log4j2.xml");
loggerContext.setConfigLocation(file.toURI());
}
[](
)同步日志,混合日志和异步日志配置详解
[Log4j2 同步日志,混合日志和异步日志配置详解](
)
[](
)配置文件详解
[Log4j2 配置文件详解](
)
[](
)日志重复打印问题
如果Root
中的日志包含了Logger
中的日志信息,并且AppenderRef
是一样的配置,则日志会打印两次。
这是 log4j2 继承机制问题,在 Log4j2 中,logger 是有继承关系的,root 是根节点,在 log4j2 中,有个 additivity 的属性,它是子 Logger 是否继承 父 Logger 的 输出源(appender) 的属性。具体说,默认情况下子 Logger 会继承父 Logger 的 appender,也就是说子 Logger 会在父 Logger 的 appender 里输出。若是 additivity 设为 false,则子 Logger 只会在自己的 appender 里输出,而不会在父 Logger 的 appender 里输出。
要打破这种传递性,也非常简单,在 logger 中添加 additivity = “false”,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="Console">
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %-5level %logger{0} - %msg%n</Pattern>
</PatternLayout>
</Console>
</Appenders>
<Loggers>
<Logger name="com.jourwon" level="debug" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Ro
ot level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
[](
)使用 Lombok 工具简化创建 Logger 类
lombok 就是一个注解工具 jar 包,能帮助我们省略一繁杂的代码。具体介绍可以看我的博客[Lombok 简介、使用、工作原理、优缺点](
)
评论