You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring Boot 1.5.9下如何将Log4j2日志通过SLF4J路由至Logback?

解决Log4j2日志通过SLF4J路由至Logback的问题

你已经找对了桥接的方向,但还需要调整依赖配置来解决那个Log4j2 could not find a logging implementation的错误,让桥接真正生效。下面是具体的解决步骤:

错误原因分析

你看到的错误是因为Log4j2的API(log4j-api)在类路径中,但它找不到官方实现包log4j-core,所以 fallback 到了内置的SimpleLogger。而我们的目标是用log4j-to-slf4j作为桥接,把Log4j2的日志调用转发给SLF4J,再由Spring Boot默认的日志框架Logback来处理输出,所以必须确保log4j-core不在类路径中,同时让桥接包正确生效。

具体配置步骤

1. 排除所有log4j-core依赖

首先检查你的Maven依赖,确保没有任何地方引入log4j-core。如果项目依赖了spring-boot-starter或其他可能带log4j-core的包,需要显式排除:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <!-- 排除log4j-core,避免冲突 -->
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
        </exclusion>
        <!-- 排除Log4j2直接绑定SLF4J的包,避免和我们的桥接冲突 -->
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
        </exclusion>
    </exclusions>
</dependency>

2. 正确添加log4j-to-slf4j桥接依赖

建议使用Spring Boot的依赖管理来控制版本,避免版本不兼容问题(不用手动指定version):

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-to-slf4j</artifactId>
</dependency>

这个包会自动依赖log4j-api,同时将所有Log4j2 API的调用转发到SLF4J。

3. 确保Logback的配置文件存在

Spring Boot默认会加载src/main/resources下的logback.xmllogback-spring.xml文件。如果没有自定义配置,Logback会使用默认规则输出到控制台;你也可以添加自定义配置来控制日志格式、输出位置等,示例如下:

<!-- logback-spring.xml 示例 -->
<configuration>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

验证配置

完成上述步骤后,重新运行代码,之前的ERROR StatusLogger提示应该会消失,日志会通过Logback输出,格式会和你在Logback配置中定义的一致。

内容的提问来源于stack exchange,提问作者Ali

火山引擎 最新活动