You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Log4J2配置失败:Spring-AMQP/Spring-Rabbit集成RabbitMQ Appender问题

解决Log4J2 RabbitMQ Appender集成(添加spring-rabbit依赖后异常)问题

哥们,我之前刚好踩过类似的坑,咱们一步步来排查和解决这个问题:

1. 先揪出依赖冲突的锅

添加spring-rabbit后出问题,大概率是间接引入了和你原有Log4J2冲突的日志依赖(比如logback、slf4j的旧桥接包)。先跑个Gradle命令排查依赖:

./gradlew dependencies --configuration compileClasspath | grep -E "(log4j|slf4j|rabbit)"

如果看到slf4j-log4j12或者logback-classic这类玩意儿,直接在spring-rabbit依赖里排除掉:

implementation 'org.springframework.amqp:spring-rabbit' {
    exclude group: 'ch.qos.logback', module: 'logback-classic'
    exclude group: 'org.slf4j', module: 'slf4j-log4j12'
}

2. 补全Log4J2 RabbitMQ Appender的依赖

spring-rabbit本身不带Log4J2的RabbitMQ Appender,得自己明确引入,注意版本要和你项目里已有的Log4J2核心版本完全一致:

implementation 'org.apache.logging.log4j:log4j-core:2.20.0' // 替换成你实际用的版本
implementation 'org.apache.logging.log4j:log4j-appender-rabbitmq:2.20.0'

3. 修正log4j2.xml配置

把RabbitMQ Appender加到你原有的配置里,示例如下(记得替换成你的RabbitMQ真实连接信息):

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <!-- 保留你原来的Console/File Appender -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        
        <!-- 新增RabbitMQ Appender -->
        <RabbitMQ name="RabbitMQAppender"
                  host="你的RabbitMQ地址" 
                  port="5672" 
                  username="你的用户名" 
                  password="你的密码"
                  virtualHost="/"
                  exchange="log_exchange" 
                  exchangeType="direct"
                  routingKey="log_routing_key"
                  durable="true"
                  deliveryMode="PERSISTENT">
            <PatternLayout pattern="%d{ISO8601} [%t] %-5level %logger{36} - %msg%n"/>
        </RabbitMQ>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RabbitMQAppender"/> <!-- 别忘了引用新Appender -->
        </Root>
    </Loggers>
</Configuration>

4. 给Spring的日志自动配置踩刹车

如果你的项目是Spring Boot,它的日志自动配置可能会干扰Log4J2的正常工作。可以在启动类里禁用自动配置:

@SpringBootApplication(exclude = {LoggingAutoConfiguration.class})
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

或者在application.properties里加一行:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.logging.LoggingAutoConfiguration

5. 确保shadowJar打包正确

用shadowJar打包时,一定要合并Log4J2的服务文件,不然Appender会加载失败。更新你的shadowJar配置:

shadowJar {
    mergeServiceFiles() // 关键!Log4J2的插件靠ServiceLoader加载,必须合并服务文件
}

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:34:35