Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Priority 的解决办法


问题概述:

使用 Spring Boot-2.0.3 进行项目开发,在配置 Druid 数据监控时,遇到缺包的问题,测试连接操作时报错,导致测试一直无法通过,部分信息如下:

Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Priority
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:264)
	at com.alibaba.druid.util.Utils.loadClass(Utils.java:203)
	at com.alibaba.druid.filter.FilterManager.loadFilter(FilterManager.java:104)
	at com.alibaba.druid.pool.DruidAbstractDataSource.addFilters(DruidAbstractDataSource.java:1286)
	at com.alibaba.druid.pool.DruidAbstractDataSource.setFilters(DruidAbstractDataSource.java:1275)
	... 113 more
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Priority
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 119 more

截图如下:
这里写图片描述


解决办法:

有同事告诉我,因为使用的 Spring Boot 为最新稳定版本,所以不排除包的版本过低导致,所以全部的包都按照官网最新兼容包进行导入;
所以首先,确认导入 Druid 包相对于当前为最新的版本,如下图:
这里写图片描述

pom.xml 中引入添加的配置,

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>

如下图:
这里写图片描述

可是最后呢,还是出现同样的错误!!!
最后没办法,只得缺那个包就到那个包呗,导入官网最新兼容包,如下图:
这里写图片描述

pom.xml 中引入添加的配置,

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

如下图:
这里写图片描述

在项目的 resources 目录下,新建一个 log4j.properties 参数配置文件,并键入如下内容:

### set log levels ###    
log4j.rootLogger = INFO,DEBUG, console, infoFile, errorFile ,debugfile,mail 
LocationInfo=true    
 
log4j.appender.console = org.apache.log4j.ConsoleAppender  
log4j.appender.console.Target = System.out  
log4j.appender.console.layout = org.apache.log4j.PatternLayout 

log4j.appender.console.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m   %x %n 
  
log4j.appender.infoFile = org.apache.log4j.DailyRollingFileAppender  
log4j.appender.infoFile.Threshold = INFO  
log4j.appender.infoFile.File = D:/logs/log
log4j.appender.infoFile.DatePattern = '.'yyyy-MM-dd'.log'  
log4j.appender.infoFile.Append=true
log4j.appender.infoFile.layout = org.apache.log4j.PatternLayout  
log4j.appender.infoFile.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m  %x %n 
  
log4j.appender.errorFile = org.apache.log4j.DailyRollingFileAppender  
log4j.appender.errorFile.Threshold = ERROR  
log4j.appender.errorFile.File = D:/logs/error  
log4j.appender.errorFile.DatePattern = '.'yyyy-MM-dd'.log'  
log4j.appender.errorFile.Append=true  
log4j.appender.errorFile.layout = org.apache.log4j.PatternLayout  
log4j.appender.errorFile.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m  %x %n

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

这样项目就可以正常的启动并进行下一步开发了,缺 org.apache.log4j.Priority 包的问题就解决了,但是导致这个问题的不应该呀,它们应该整合的时候已经配置在里面的了呃,所以这个问题还得进一步的研究一下,如果有知道因果的,望不吝赐教,共同学习,共同进步!!!


日志记录:
2019-01-18 上午 10点
感谢评论区那位老弟的热心评论,比较有道理,博主就基于目前最新的Spring Boot 立即去查看了其当前的组织架构,和源码,证实一下,但具体的为社么Spring Boot 会摒弃 log4j-over-slf4j 而使用 log4j-to-slf4j,博主就不妄加评论了,可能是人家另有原因呢,所以在这儿再追加叙述哈,
在这里插入图片描述
有兴趣的可以自己去研究研究:
在这里插入图片描述
在新版的 Spring Boot 中获取到 Logger 对象稍有不同,在以前使用slf4j的时,使用LoggerFactory去获取,而现在只使用log4j2的话,一般是使用LogManager去获取的。(后面有时间再作详细的讲解),示例代码如下:

package com.cdp.common.log;

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

public class LogsUtils{
    private static final Logger LOGGER = LogManager.getLogger();

    public static void main(String... args) {
        String result = args.length > 0 ? args[0] : "world";
        LOGGER.info("Hello, {}!", result);
        LOGGER.debug("Got calculated value only if debug enabled: {}", () -> doSomeCalculation());
    }

    private static Object doSomeCalculation() {
        // do some complicated calculation
    }
}

好了,关于Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Priority 的解决办法 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值