atitit。解决 No suitable Log constructor。。NoClassDefFoundError: org/apache/log4j/Category 找不到类的
atitit。解决 No suitable Log constructor。。NoClassDefFoundError: org/apache/log4j/Category 找不到类的
4. parent-first代理机制还是child-first代理机制 2
4.1. Thread Context ClassLoader的出现 2
现象:
org.apache.commons.logging.LogConfigurationException: No suitable Log constructor
Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Category
1. 深的层次原因::ClassLoader问题
ClassLoader问题可以分成三类:
1. 抛出NoClassDefFoundError,即某个Logger相关的类对child ClassLoader来说是可见的,但是对parent ClassLoader来说则不可见。
2. 非兼容性赋值,即两类虽然相同或存在父子关系,但是由于ClassLoader不一样而导致不可以相互赋值。
在Java中,处于安全的考虑,从1.2开始引入代理机制,即在ClassLoader每次加载一个类时,首先去查找(代理给)parent ClassLoader是否存在该类的定义,如果有,则使用parent ClassLoader加载;否则,使用当前ClassLoader本身去加载该类。这样做可以阻止一些不安全的代码覆盖JDK内部的类,从而实现一些非法操作。Java文档中对该特性的描述如下:
因而parent ClassLoader优先是Java中的默认原则。然而在Web Application中却建议使用child ClassLoader优先的机制,从而保证Web Application可以覆盖一些common的配置和JAR包,如Servlet的文档中对Web Application ClassLoader的描述如下:
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
2. 排除流程
怀疑是jdk的lib哈面儿有class 优先加载..在查询自定义的种类的时候儿.走新不上兰..
org.apache.commons.logging.LogConfigurationException ,点击查询,真的是jdk8中的..在找个log4j当然走心不死兰...
3. 解决之道::
不个comm.loig从jdk删除.叫哪使用web appa的库... (推荐)
要不走不个log4j类库copoy 到个jdk lib哈面儿,叫哪能行上..
4. parent-first代理机制还是child-first代理机制
因而parent ClassLoader优先是Java中的默认原则。然而在Web Application中却建议使用child ClassLoader优先的机制,从而保证Web Application可以覆盖一些common的配置和JAR包,如Servlet的文档中对Web Application ClassLoader的描述如下:
其实以上这些不管是parent-first代理机制还是child-first代理机制都不是问题,问题出在由于Commons Logging应用太广泛了,导致很多Web服务器在实现时也使用了该包,然而又想保证不同Web Application中的日志配置不相互干扰,这样问题就来
4.1. Thread Context ClassLoader的出现
是为了解决一个框架在被Parent ClassLoader加载,然而它想加载Child ClassLoader中的类的需求,因而很多框架代码内部会使用Thread Context ClassLoader。比如在LogFactoryImpl的实现中就有很关于使用Thread Context ClassLoader的例子。Thread Context ClassLoader是需要手动设置的,不然默认为Parent Thread中的Thread Context ClassLoader。但是在实际过程中,Thread Context ClassLoader总是不会被正确的设置,比如以下代码注释掉的语句。
默认情形哈::因为在没有正确的设置Thread Context ClassLoader时,当前的Thread Context ClassLoader是System ClassLoader。log4j对System ClassLoader是不可见的,而且LogFactory是System ClassLoader加载的,因而LogFactory根本找不到log4j包,从而导致即使在LoggerPrinterWithJCL中的日志打印语句还是使用了JDK Logging。而ParentFirstTestJCL0中使用JDK Logging则比较容易理解了。
,然而后来又出现了ClassNotFoundException(Category是Logger父类,要初始化Logger首先需要初始化其父类Catetory)是因为LogFactory这个实例是由System ClassLoader加载的,在Java中,在一个类要加载其他类时,使用加载该类的ClassLoader去加载要加载的类。所以在LogFactory实例去加载log4j中的Logger类时,使用的System ClassLoader,log4j包对System ClassLoader是不可见的,因而出现了ClassNotFoundException
5. 参考
org.apache.commons.logging.LogConfigurationException No suitable Log constructor,NoClassDefFoundError org apache log4j Categor - 晚安,假行僧! - 博客频道 - CSDN.NET.htm
Commons Logging存在的ClassLoader问题详解 - 上善若水 - BlogJava.htm
atitit。解决 No suitable Log constructor。。NoClassDefFoundError: org/apache/log4j/Category 找不到类的的更多相关文章
- 解决java.lang.NoClassDefFoundError: org/apache/log4j/Level
现象: java.lang.NoClassDefFoundError: org/apache/log4j/Level at org.slf4j.LoggerFactory.getSingleton(L ...
- 转:Caused by: java.lang.NoSuchMethodError: org.apache.log4j.Category.log
Caused by: java.lang.NoSuchMethodError: org.apache.log4j.Category.log出现的异常:java.lang.reflect.Invocat ...
- java.lang.NoClassDefFoundError: Lorg/apache/log4j/Logger报错
java.lang.NoClassDefFoundError: Lorg/apache/log4j/Logger报错 错误提示: java.lang.NoClassDefFoundError: Lor ...
- MyBatis3错误:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Priority的问题解决
在使用Maven新建QuitStart类型项目时,引入了MyBatis3.2.0版本的JAR包之后,出现如下错误: Exception in thread "main" java. ...
- Maven项目java.lang.NoClassDefFoundError: Lorg/apache/log4j/Logger报错
本文转载自:http://www.javaweb1024.com/info/894.jspx maven管理的项目,里面已经引入了log4j的包 maven引入如下: <dependency&g ...
- Java_异常_02_java.lang.NoClassDefFoundError: org/apache/log4j/Level
总结:解析Json时,除了要导入json-lib-2.2-jdk15.jar外,还要导入: commons-beanutils.jar, commons-httpclient.jar, commons ...
- java.lang.NoClassDefFoundError: org/apache/log4j/Priority的问题解决
在pom 文件中添加 <dependency> <groupId>log4j</groupId> <artifactId>log4j</artif ...
- IDEA里运行代码时出现Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger的解决办法(图文详解)
不多说,直接上干货! 问题详情 运行出现log4j的问题 -classpath "C:\Program Files\Java\jdk1.8.0_66\jre\lib\charsets.jar ...
- Atitit 解决Unhandled event loop exception错误的办法
Atitit 解决Unhandled event loop exception错误的办法 查看workspace/.metadata/.log org.eclipse.swt.SWTError: No ...
随机推荐
- pytest文档3-pycharm运行pytest
前言 上一篇pytest文档2-用例运行规则已经介绍了如何在cmd执行pytest用例,平常我们写代码在pycharm比较多 写完用例之后,需要调试看看,是不是能正常运行,如果每次跑去cmd执行,太麻 ...
- Visual Studio 2012连接TFS2010登录不了
一直用VS2012+TFS2010开发项目, 最近几天忽然很不正常, 在VS中会频繁要求输入TFS的账号密码, 经常要输入很多遍才可以正常连接签入签出. 这几天更甚, 基本上直接连接不了了. 网上找到 ...
- ECMAScript新特性【一】--Object.create
Object.create(prototype, descriptors) :创建一个具有指定原型且可选择性地包含指定属性的对象 参数: prototype 必需. 要用作原型的对象. 可以为 nu ...
- sqlmap使用帮助文档(1)
当给sqlmap这么一个url的时候,它会: 1.判断可注入的参数 2.判断可以用那种SQL注入技术来注入 3.识别出哪种数据库 4.根据用户选择,读取哪些数据 sqlmap支持五种不同的注入模式: ...
- Qt Creator的安装与Qt交叉编译的配置
Qt Creator 的安装 到Qt官网下载Qt Creator https://www.qt.io/download-open-source/ 其它旧版本点击Achieve连接下载 或登录http ...
- JSON劫持漏洞攻防原理及演练
注* 作者发表这篇文章的时间较早,某些方法可能并不是最好的解决方案,但针对这种漏洞进行的攻击还依然可见,如早期的:QQMail邮件泄露漏洞,下面介绍的是对这种攻击原理的介绍. 不久之前,我写了一篇文章 ...
- SLAX初体验
Slax是一个便捷.便携的Linux操作系统.它的界面既充满时尚感,又可基于不同模块的功能运作.它的界面富有时尚感,并集成了不同的模块的界面.尽 管它的容量十分娇小,Slax依然预载了不少日常应用的软 ...
- Java 并发:内置锁 Synchronized
摘要: 在多线程编程中,线程安全问题是一个最为关键的问题,其核心概念就在于正确性,即当多个线程訪问某一共享.可变数据时,始终都不会导致数据破坏以及其它不该出现的结果. 而全部的并发模式在解决问题时,採 ...
- MQTT---HiveMQ源代码具体解释(十八)Cluster-kryo与Serializer
源博客地址:http://blog.csdn.net/pipinet123 MQTT交流群:221405150 既然是Cluster,node之间肯定是须要交互的,那么肯定是须要序列化和反序列化.Hi ...
- 算法笔记_021:广度优先查找(Java)
目录 1 问题描述 2 解决方案 2.1 蛮力法 1 问题描述 广度优先查找(Breadth-first Search,BFS)按照一种同心圆的方式,首先访问所有和初始顶点邻接的顶点,然后是离它两条边 ...