log4j包导入错误求助:编译Java程序提示包不存在
解决log4j包找不到的编译错误
你遇到的问题核心有两个:使用了log4j 2.x的依赖包,但代码里写的是log4j 1.x的导入路径,另外缺少log4j 2.x必需的API包。下面一步步帮你解决:
1. 修正代码中的导入语句
log4j 2.x和1.x的包结构完全不同,你下载的是2.11.0版本,必须把导入语句改成log4j 2.x的正确路径,同时还要导入LogManager来获取Logger实例:
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; public class App { private static final Logger logger = LogManager.getLogger(App.class); public static void main(String[] args) { System.out.println("Howdy"); logger.info("测试log4j 2.x日志输出"); // 可选:添加日志测试代码 } }
2. 确保CLASSPATH包含所有必需的log4j 2.x包
log4j 2.x需要两个核心jar包才能正常编译运行:
log4j-api-2.11.0.jar:提供基础API接口log4j-core-2.11.0.jar:实现具体的日志功能
你之前只添加了core包,需要把api包也加入CLASSPATH:
export CLASSPATH=$CLASSPATH:/home/ahmed/temp/log4j/apache-log4j-2.11.0-bin/log4j-api-2.11.0.jar:/home/ahmed/temp/log4j/apache-log4j-2.11.0-bin/log4j-core-2.11.0.jar
3. 更可靠的编译方式:直接用-cp参数指定类路径
环境变量CLASSPATH可能存在会话失效或冲突问题,推荐直接在编译时用javac的-cp(或-classpath)参数指定依赖,直观且不易出错:
javac -cp "/home/ahmed/temp/log4j/apache-log4j-2.11.0-bin/log4j-api-2.11.0.jar:/home/ahmed/temp/log4j/apache-log4j-2.11.0-bin/log4j-core-2.11.0.jar" App.java
编译成功后,运行时也要指定类路径(注意.:表示当前目录,让JVM能找到编译后的App.class):
java -cp ".:/home/ahmed/temp/log4j/apache-log4j-2.11.0-bin/log4j-api-2.11.0.jar:/home/ahmed/temp/log4j/apache-log4j-2.11.0-bin/log4j-core-2.11.0.jar" App
额外提示:添加log4j2配置文件
log4j 2.x默认需要配置文件(比如log4j2.xml或log4j2.properties)放在类路径下,否则运行时会打印警告。你可以在项目根目录创建一个简单的log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <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,提问作者Ahmed A
相关产品推荐
相关产品推荐

