SpringBoot(11)之切换日志框架为Log4j

SpringBoot(11)之切换日志框架为Log4j

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

在上一节我们已经知道,SpringBoot 默认使用 Logback 作为日志实现,而我们如果想要切换到其它日志实现该怎么做呢?下面以切换到 Log4j 为例:

我们可以先分析 【SpringBoot 的日志结构】 与 SpringBoot 默认的 SLF4J 日志适配图:

image.png

因为 SpringBoot 默认使用的是 Logback 实现,所以现在 SpringBoot 有导入 jcl-over-slf4j.jarlog4j-over-slf4j.jarjul-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>

接着看下图:

image.png

可以看到要将 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

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/springboot11.html

Buy me a cup of coffee ☕.