编译日志出现log4j 1.2.12但mvn依赖树不显示,求排查与升级方法
排查log4j 1.2.12引入来源并升级至2.x版本
一、排查log4j 1.2.12的引入来源
- 执行
mvn dependency:tree -Dverbose命令:默认dependency:tree不会展示可选依赖,添加-Dverbose参数可列出所有传递依赖(包括被排除的和可选的),便于定位log4j 1.2.12的引入路径。 - 检查Maven插件依赖:从日志看下载动作发生在
maven-compiler-plugin的compile阶段,可能是老版本插件(如编译、测试插件)间接引入了log4j 1.x。可查看项目pom.xml的插件配置,或用mvn help:describe -Dplugin=maven-compiler-plugin:3.1 -Ddetail查看该插件的依赖树。 - 执行
mvn dependency:list命令:该命令会列出项目所有已解析的依赖(含groupId、artifactId、版本),确认log4j 1.2.12是否在列表中,再结合dependency:tree -Dverbose锁定来源。 - 查看本地Maven仓库:找到本地仓库中log4j 1.2.12的目录,查看
_remote.repositories文件,可获取该jar包的引入关联信息(针对传递依赖场景)。
二、升级至log4j 2.x版本
1. 排除log4j 1.x依赖
通过上述方法定位到引入log4j 1.2.12的依赖后,在pom.xml中添加排除规则:
<dependency> <groupId>[依赖的groupId]</groupId> <artifactId>[依赖的artifactId]</artifactId> <version>[依赖版本]</version> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency>
若为插件依赖引入,可在插件配置中添加排除:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <dependencies> <dependency> <groupId>[插件依赖的groupId]</groupId> <artifactId>[插件依赖的artifactId]</artifactId> <version>[插件依赖版本]</version> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </plugin>
2. 引入log4j 2.x核心依赖
在pom.xml中添加log4j 2.x的API和核心包(建议使用最新稳定版本):
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.20.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.20.0</version> </dependency>
若项目存在遗留的log4j 1.x代码需兼容,添加适配桥接包:
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-1.2-api</artifactId> <version>2.20.0</version> </dependency>
3. 替换配置文件
将原log4j.properties或log4j.xml替换为log4j 2.x的配置文件(如log4j2.xml),适配2.x配置语法,示例:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="INFO"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
内容的提问来源于stack exchange,提问作者Swaraj Shekhar
相关产品推荐
相关产品推荐

