在上一节我们已经知道,SpringBoot 默认使用 Logback 作为日志实现,而我们如果想要切换到其它日志实现该怎么做呢?下面以切换到 Log4j 为例:
我们可以先分析 【SpringBoot 的日志结构】 与 SpringBoot 默认的 SLF4J 日志适配图:
因为 SpringBoot 默认使用的是 Logback 实现,所以现在 SpringBoot 有导入 jcl-over-slf4j.jar
、 log4j-over-slf4j.jar
、 jul-to-slf4j.jar
这三个日志替换包,而我们要切换成 Log4j 实现,首先我们要排除 Log4j 的日志替换包即 log4j-over-slf4j.jar
和 Logback 的实现包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>log4j-over-slf4j</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>logback-classic</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion>
</exclusions>
</dependency>
接着看下图:
可以看到要将 Log4j 切换为 SLF4J 的实现需要两个替换包,这两个替换包 SpringBoot 默认已经使用了,所以还需要添加一个适配包:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
此时可以添加 Log4j 的配置文件 log4j.properties
:
# log4j.properties
log4j.rootLogger = info,stdout
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
运行项目,会发现日志实现已经切换到 Log4j。
Log4j2 场景启动器
上面演示的是如何切换 SpringBoot 的日志实现为 Log4j,看起来有些麻烦,下面再看一个示例,将 SpringBoot 的日志实现切换为 Log4j2。
切换为 Log4j2 就很简单了,因为 SpringBoot 给我们提供了 Log4j2 的场景启动器,通过之前的分析我们已经知道 SpringBoot 默认日志场景启动器为 spring-boot-starter-logging
,下面我们直接排除这个场景启动器的依赖,添加 Log4j2 的场景启动器:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
此时 SpringBoot 项目的日志实现就已经切换为 Log4j2 了,同 Logback,要使用 Profile 功能时,需修改 Log4j2 的配置文件名为 log4j2-spring.xml
。
评论区