升级ZooKeeper至3.9.1后log4j2.xml配置失效问题求助
问题解决方案
以下是针对ZooKeeper升级后Log4j2配置失效问题的具体排查和解决步骤:
1. 强制排除ZooKeeper依赖中的日志组件
ZooKeeper 3.9.x版本可能自带了SLF4J绑定或其他日志依赖,会干扰项目原有Log4j2配置。在pom.xml引入ZooKeeper时,排除所有日志相关传递依赖:
<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.9.1</version> <exclusions> <!-- 排除所有可能冲突的日志依赖 --> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> </exclusion> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> </exclusion> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> </exclusion> </exclusions> </dependency>
2. 排查日志依赖冲突
执行Maven命令生成依赖树,定位所有日志相关依赖,确认无残留的冲突组件:
mvn dependency:tree -Dincludes=org.slf4j,org.apache.logging.log4j,ch.qos.logback
若发现除项目指定Log4j2外的其他日志实现(如Logback、Log4j1),在对应依赖中添加排除规则。
3. 统一Log4j2依赖版本
在pom.xml的<dependencyManagement>中引入Log4j2的BOM,确保项目所有模块使用统一版本的Log4j2组件:
<dependencyManagement> <dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-bom</artifactId> <version>你的Log4j2版本</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
同时确保引入SLF4J到Log4j2的绑定依赖:
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> </dependency>
4. 验证Log4j2配置文件加载状态
启动项目时添加JVM参数,开启Log4j2调试模式,确认配置文件是否被正确加载:
-Dlog4j2.debug=true
查看启动日志,确认是否输出Found configuration file相关信息,若提示配置文件未找到或格式错误,检查log4j2.xml的路径和语法。
5. 禁用Spring Boot日志自动配置(若为Spring Boot项目)
Spring Boot默认的日志自动配置可能覆盖自定义Log4j2设置,需禁用并手动引入Log4j2 Starter:
- 在application.properties中添加:
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.logging.LoggingAutoConfiguration
- 或在pom.xml中排除默认日志Starter,引入Log4j2 Starter:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</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>
6. 检查Log4j2配置文件内容
确认log4j2.xml中的格式和级别配置正确:
- 确保PatternLayout包含时间戳:
<PatternLayout pattern="[%d{dd/MM/yy HH:mm:ss:SSS z}] [%t] %level %logger{36} - %msg%n"/>
- 确认目标组件的日志级别设置为ERROR:
<Logger name="org.apache.camel" level="ERROR" additivity="false"> <AppenderRef ref="你的输出Appender"/> </Logger> <Logger name="org.apache.kafka" level="ERROR" additivity="false"> <AppenderRef ref="你的输出Appender"/> </Logger> <Logger name="org.apache.zookeeper" level="ERROR" additivity="false"> <AppenderRef ref="你的输出Appender"/> </Logger> <Logger name="org.springframework" level="ERROR" additivity="false"> <AppenderRef ref="你的输出Appender"/> </Logger>
内容的提问来源于stack exchange,提问作者user2401856
相关产品推荐
相关产品推荐

