在JBOSS启动的时候,相信很多人都见到过下面这个日志错误:
[STDERR:152] - log4j:ERROR Could not instantiate class [org.jboss.logging.appender.FileAppender].
[STDERR:152] - java.lang.ClassNotFoundException: org.jboss.logging.appender.FileAppender
[STDERR:152] - at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
[STDERR:152] - at java.security.AccessController.doPrivileged(Native Method)
[STDERR:152] - at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
[STDERR:152] - at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
[STDERR:152] - at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
[STDERR:152] - at java.lang.Class.forName0(Native Method)
[STDERR:152] - at java.lang.Class.forName(Class.java:169)
[STDERR:152] - at org.apache.log4j.helpers.Loader.loadClass(Loader.java:198)
[STDERR:152] - at org.apache.log4j.helpers.OptionConverter.instantiateByClassName(OptionConverter.java:326)
[STDERR:152] - at org.apache.log4j.helpers.OptionConverter.instantiateByKey(OptionConverter.java:123)
[STDERR:152] - at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:752)
[STDERR:152] - at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:735)
[STDERR:152] - at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:615)
[STDERR:152] - at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:502)
[STDERR:152] - at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:547)
[STDERR:152] - at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:483)
[STDERR:152] - at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
[STDERR:152] - at org.apache.log4j.Logger.getLogger(Logger.java:104)
[STDERR:152] - at org.apache.commons.logging.impl.Log4JLogger.getLogger(Log4JLogger.java:289)
[STDERR:152] - at org.apache.commons.logging.impl.Log4JLogger.<init>(Log4JLogger.java:109)
[STDERR:152] - at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[STDERR:152] - at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
[STDERR:152] - at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
[STDERR:152] - at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
[STDERR:152] - at org.apache.commons.logging.impl.LogFactoryImpl.createLogFromClass(LogFactoryImpl.java:1116)
[STDERR:152] - at org.apache.commons.logging.impl.LogFactoryImpl.discoverLogImplementation(LogFactoryImpl.java:858)
[STDERR:152] - at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:604)
[STDERR:152] - at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:336)
[STDERR:152] - at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:310)
[STDERR:152] - at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685)
[STDERR:152] - at org.apache.hadoop.conf.Configuration.<clinit>(Configuration.java:137)
......
[STDERR:152] - log4j:ERROR Could not instantiate appender named "FILE".
这个其实跟ClassLoader和Log4j的加载顺序有关,大致过程如下:
- Commons-Logging查询LogFactory的实现,这里只能是Log4j(相关顺序参考我的另外一篇博客)
- Log4j通过加载其的ClassLoader去查找log4j.xml文件,详细代码可以查询LogManager的static初始化块
第一步:查询log4j.xml文件,查询的方式是通过Loader.getResource方法,而这个方法里面会一直查询Parent ClassLoader的Resource:
public URL getResource(String name) {
URL url;
if (parent != null) {
url = parent.getResource(name);
} else {
url = getBootstrapResource(name);
}
if (url == null) {
url = findResource(name);
}
return url;
}
如果你的应用中没有配置log4j.xml,则会继续下一步去查找log4j.properties文件(JBOSS中也没有log4j.xml)
第二步:查询log4j.properties文件,查询方法和上面的一样,通过调试发现最终会找到JBOSS的bin目录中的run.jar中的log4j.properties文件,而其中就是有FILE这个org.jboss.logging.appender.FileAppender,日志出错的原因就在这里。
解决方法:在你的应用中配置log4j.xml,而不是配置log4j.properties文件。
分享到:
相关推荐
在IT行业中,日志系统是诊断和排查问题的关键工具,特别是在服务器端应用如JBOSS中。"JBOSS 6.0 Final 日志无法写入...同时,如果问题依然存在,建议向JBOSS社区或官方支持寻求帮助,他们可能提供更专业的解决方案。
- nested throwable错误解决方案 在Jboss应用服务器中,启动报错Failed to parse WEB-INF/web.xml; - nested throwable是一种常见的错误,本文将对此错误进行深入分析,并提供解决方案。 错误原因 Jboss应用...
#### 解决方案 要解决jBoss EAP 6.2 或 AS 7 以上的乱码问题,可以通过修改服务器配置文件`standalone.xml`来实现。具体步骤如下: 1. **定位配置文件**: - 找到jBoss安装目录下的`configuration/standalone.xml...
本文将针对这些问题提供解决方案。 首先,我们讨论的是EditPlus软件中的问题。EditPlus是一款轻量级且功能强大的文本编辑器,深受程序员喜爱。当保存文件时,它默认会创建一个.bak备份文件。如果你不想让EditPlus...
JBoss Logging 提供了一种灵活的日志解决方案,它支持多种日志实现,如Log4j、Java Util Logging 和 Logback。这个特定版本(3.0.0.ga)可能包含了对日志记录的各种优化和改进,以适应不同的环境需求。 在使用...
在解决问题的过程中,标签中涉及的“jboss jdk java j2ee 冲突”暗示了解决方案可能涉及到调整JDK版本、JBoss配置或J2EE(Java 2 Platform, Enterprise Edition)规范的正确实现。J2EE是Java平台的一个版本,专为...
在文档的最后,作者列举了可能遇到的一些常见问题,并提供了相应的解决方案或者建议的解决途径。 整体而言,Jboss7快速入门手册覆盖了从安装到配置再到管理的全方位内容,使得用户能够快速掌握Jboss7的使用。文档...
JBoss有一个活跃的用户社区,可以在官方论坛或Stack Overflow等平台寻找类似问题的解决方案。 总的来说,解决"jbos打包不起作用,替换jar即可"的问题,需要深入理解JBoss的类加载机制、依赖管理以及日志分析。同时...
- **社区论坛**:加入JBoss社区论坛,与其他开发者交流经验、共享解决方案。 - **GitHub仓库**:关注JBoss项目在GitHub上的仓库,获取最新的代码更新和技术动态。 通过以上内容的学习与实践,相信开发者能够更好地...
10. **故障排查**:最后,文档可能会包含一些常见的错误和问题解决方案,这对于开发者来说是非常实用的。 总之,《JBoss中文文档 CSDN资源下载》是学习和操作JBoss 4.0.x的重要参考资料,无论是初学者还是有经验的...
这些库通常一起使用,以在Java应用程序中提供全面的持久化、数据验证和日志记录解决方案。例如,在使用Hibernate进行数据库操作时,Hibernate Validator可以帮助验证实体对象的属性,确保数据的正确性。同时,通过...
3. **错误处理**:当遇到启动异常或运行错误时,应首先检查服务器日志,然后查阅官方文档或社区论坛获取解决方案。 总结来说,JBoss 4.0.2作为一个成熟的Java应用服务器,其强大的功能和稳定性使其在企业环境中广泛...
5. **搜索解决方案**:利用提供的博文链接(虽然这里为空)或在线社区如Stack Overflow寻找类似问题的解决方案。 总的来说,解决`java.lang.NoClassDefFoundError`涉及对项目结构、依赖管理、构建过程和服务器配置...
记住,详细的错误日志是解决问题的关键,因此,当遇到类似问题时,查看服务器的log文件,找出与部署或刷新相关的错误信息,往往能提供解决方案的方向。 总之,理解并解决JBoss部署Web项目时的刷新问题,需要综合...
教程可能会包含常见问题的解决方案和日志分析方法。 11. **源码解析**: 对于源码标签,文档可能涉及JBoss核心组件的源码结构、设计模式以及关键类的功能解析,帮助开发者深入理解其工作原理。 由于没有具体的...
JBoss ESB 4.6作为一款强大的SOA中间件,提供了丰富的功能和支持,帮助开发者构建灵活、可扩展的服务集成解决方案。通过深入理解上述知识点,开发者可以更好地掌握JBoss ESB 4.6的核心概念和技术细节,从而提高应用...
JBoss 是一个开源的应用服务器,它基于Java EE(Java Platform, Enterprise Edition)规范,提供了全面的企业级应用程序部署和管理解决方案。本篇将详细介绍JBoss在Unix系统上的安装和应用过程,帮助你快速掌握如何...
标题 "jdk6 jboss5 webservice bug" 暗示了...解决这类问题通常需要耐心和对Java EE架构的深入理解,通过逐步排查和测试,最终找到解决方案。如果问题过于复杂,可能需要求助于经验丰富的开发者或专业的技术支持团队。