升级Log4J时出现org.apache.log4j包不存在等问题,如何解决?
解决Log4J升级中的包与类找不到问题
核心原因
你遇到的问题本质是Log4J 2.x与1.x的包结构、API完全不兼容:最新版Log4J(2.x系列)已经废弃了1.x的org.apache.log4j包路径,同时Level、FileAppender等核心类的位置和使用方式也做了彻底重构。
具体解决步骤
1. 清理并修正依赖
- 移除项目中旧的Log4J 1.x依赖(比如
log4j:log4j) - 引入Log4J 2.x的核心依赖,以Maven为例:
<dependencies> <!-- Log4J 2 API --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.20.0</version> <!-- 替换为最新稳定版 --> </dependency> <!-- Log4J 2 核心实现 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.20.0</version> </dependency> </dependencies>
2. 替换代码中的导入路径
将原有1.x的导入全部替换为2.x的对应路径:
- Logger类:
旧:import org.apache.log4j.Logger;
新:import org.apache.logging.log4j.LogManager;+import org.apache.logging.log4j.Logger; - Level类:
旧:import org.apache.log4j.Level;
新:import org.apache.logging.log4j.Level; - FileAppender:Log4J 2.x不再提供直接的
FileAppender类,推荐通过配置文件定义,若需硬编码创建,可使用FileAppender.Builder:import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.appender.FileAppender; import org.apache.logging.log4j.core.layout.PatternLayout; // 示例:创建FileAppender并绑定到Logger LoggerContext context = LoggerContext.getContext(false); FileAppender appender = FileAppender.newBuilder() .setName("FileAppender") .setFileName("app.log") .setLayout(PatternLayout.newBuilder().withPattern("%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n").build()) .build(); context.getConfiguration().addAppender(appender); context.getRootLogger().addAppender(appender);
3. 适配API使用逻辑
- 获取Logger实例:
旧:Logger logger = Logger.getLogger(YourClass.class);
新:Logger logger = LogManager.getLogger(YourClass.class); - 日志级别设置:Log4J 2.x优先通过配置文件管理级别,若需代码调整,可使用
logger.setLevel(Level.DEBUG)(注意导入的是2.x的Level类) - 避免硬编码Appender:Log4J 2.x推荐用配置文件(如
log4j2.xml)定义Appender、Logger规则,减少代码耦合,示例配置片段:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <File name="FileAppender" fileName="app.log"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/> </File> </Appenders> <Loggers> <Root level="debug"> <AppenderRef ref="FileAppender"/> </Root> </Loggers> </Configuration>
4. 检查遗留代码
排查项目中所有使用旧API的地方,比如BasicConfigurator、PropertyConfigurator等工具类,这些在2.x中都已被移除,需替换为对应的配置方式。
内容的提问来源于stack exchange,提问作者dongala Charitha60
相关产品推荐
相关产品推荐

