解决java log4j 配置log4jCaused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager...

本文详细介绍了在使用Log4j进行日志记录时遇到的双包冲突问题及解决方案。作者分享了如何识别和解决由两个不同版本的Log4j包导致的ClassNotFoundException错误,并提供了一种有效的配置方法。

前提安装http://mirror.bit.edu.cn/apache/logging/log4j/2.11.2/apache-log4j-2.11.2-bin.zip

Buildpath 配置add extend jar :   log4j-1.2.17.jar

project/src/下 新建log4j配置文件

安装完成配置完后依然报错Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager

解决:查看原来是有2个含有 org.apache.logging.log4j.LogManager 类的的包导致一个是之前接口httpclent-api-log4j的,一个是上面下载的

删除http-api-log4j问题解决

送上配置log4.jproperties

### log output control D is debug log output is or not ,E is ERROR OUTPUT is or not control by have D ,E manual control
log4j.rootLogger = error,stdout,D,E

### console logs ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### debug log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ./logs/debug/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

###error logs ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = ./logs/error/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

---------------------

转载于:https://www.cnblogs.com/SunshineKimi/p/10540376.html

D:\JDK_Version\jdk-24\bin\java.exe -Dcatalina.home=D:\apache-tomcat-10.1.48-windows-x64\apache-tomcat-10.1.48 -Dcatalina.base=C:\Users\48148\.SmartTomcat\goodbook\goodbook -Djava.io.tmpdir=C:\Users\48148\.SmartTomcat\goodbook\goodbook\temp -Djava.util.logging.config.file=C:\Users\48148\.SmartTomcat\goodbook\goodbook\conf\logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager "-javaagent:D:\IntelliJ IDEA Community Edition 2025.2.1\lib\idea_rt.jar=51638" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\apache-tomcat-10.1.48-windows-x64\apache-tomcat-10.1.48\bin\bootstrap.jar;D:\apache-tomcat-10.1.48-windows-x64\apache-tomcat-10.1.48\bin\tomcat-juli.jar org.apache.catalina.startup.Bootstrap start NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED Handler error java.lang.ClassNotFoundException: java.com.example.goodbook.com.example.goodbook.dao.util.logging.ConsoleHandler at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:580) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:490) at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:549) at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:487) at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:299) at java.logging/java.util.logging.LogManager.readPrimordialConfiguration(LogManager.java:413) at java.logging/java.util.logging.LogManager.ensureLogManagerInitialized(LogManager.java:366) at java.logging/java.util.logging.LogManager.getLogManager(LogManager.java:398) at java.logging/java.util.logging.Logger.demandLogger(Logger.java:638) at java.logging/java.util.logging.Logger.getLogger(Logger.java:708) at java.logging/java.util.logging.Logger.getLogger(Logger.java:691) at org.apache.juli.logging.DirectJDKLog.<init>(DirectJDKLog.java:61) at org.apache.juli.logging.DirectJDKLog.getInstance(DirectJDKLog.java:176) at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:115) at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:136) at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:185) at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:47) WARNING: A restricted method in java.lang.System has been called WARNING: java.lang.System::load has been called by org.apache.tomcat.jni.Library in an unnamed module (file:/D:/apache-tomcat-10.1.48-windows-x64/apache-tomcat-10.1.48/lib/tomcat-jni.jar) WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module WARNING: Restricted methods will be blocked in a future release unless native access is enabled
最新发布
10-21
### 解决 Hive Metastore 启动时因 `java.lang.ClassNotFoundException: org.apache.logging.log4j.spi.AbstractLoggerAdapter` 导致的问题 Hive Metastore 启动时遇到 `java.lang.ClassNotFoundException: org.apache.logging.log4j.spi.AbstractLoggerAdapter` 的问题,通常与日志框架的依赖冲突或缺失有关。以下是详细分析和解决方案。 #### 1. 检查 Log4j 和 SLF4J 依赖 Hive 使用 Log4j 作为其日志记录框架,而 SLF4J 是一个抽象层,允许应用程序在不同日志实现之间切换。如果 Maven 项目中存在多个版本的日志框架依赖,可能会导致类加载冲突。需要检查项目的 `pom.xml` 文件,确保以下依赖正确配置: ```xml <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.x</version> <!-- 确保版本兼容 --> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.x</version> <!-- 确保版本兼容 --> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.x</version> <!-- 确保版本兼容 --> </dependency> ``` 如果 `log4j-slf4j-impl` 被标记为 `provided`,可能无法正确加载类[^2]。建议删除 `provided` 标记,确保依赖在运行时可用。 #### 2. 检查依赖冲突 通过执行以下命令,检查是否存在依赖冲突: ```bash mvn dependency:tree ``` 如果发现多个版本的 `log4j` 或 `slf4j` 存在,可能导致类加载失败。例如,以下情况表明存在冲突: ``` [INFO] +- org.apache.logging.log4j:log4j-core:jar:2.17.1:compile [INFO] +- org.apache.logging.log4j:log4j-slf4j-impl:jar:2.14.1:compile ``` 解决方法是排除冲突的依赖版本。例如,在 `pom.xml` 中排除旧版本: ```xml <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.17.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.17.1</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency> ``` #### 3. 验证 Classpath 配置 确保 Hive 的 Classpath 中包含正确的日志库文件。可以通过以下命令验证: ```bash echo $CLASSPATH ``` 如果未包含 Log4j 或 SLF4J 的 JAR 文件,可以手动添加路径。例如: ```bash export CLASSPATH=$CLASSPATH:/path/to/log4j-core-2.x.jar:/path/to/log4j-slf4j-impl-2.x.jar ``` #### 4. 检查 Hive 配置文件 Hive 的日志配置文件 `log4j.properties` 或 `log4j2.xml` 可能也需要调整。确保文件中指定的日志实现与实际加载的库一致。例如: ```properties log4j.rootLogger=INFO, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{ISO8601} %-5p %c - %m%n ``` 如果使用 Log4j2,则需配置 `log4j2.xml` 文件: ```xml <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{ISO8601} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration> ``` #### 5. 清理并重新构建项目 完成上述调整后,清理并重新构建项目以确保更改生效: ```bash mvn clean install ``` #### 6. 验证 Hive Metastore 启动 重新启动 Hive Metastore 服务,验证问题是否解决: ```bash nohup hive --service metastore & ``` 如果问题仍然存在,可以通过查看日志文件进一步排查。日志文件通常位于 `/tmp/<username>/hive.log` 或 Hive 安装目录下的 `logs` 文件夹中。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值