java.lang.NoClassDefFoundError:Resin 服务器启动时偶尔发生
java.lang.NoClassDefFoundError:在 Resin 服务器启动时偶尔发生
这是在 Resin 3.0.21 上 在 Linux 机器上使用 Java 1.5...
我在 web.xml 上定义了一个 servlet 来加载 log4j.properties。 当 servlet 尝试在启动时加载时,会抛出此错误。
log4j-init: init log4j:ERROR 无法实例化类 [org.apache.log4j.DailyRollingFileAppender]。 java.lang.ClassNotFoundException:org.apache.log4j.DailyRollingFileAppender [java.lang.NoClassDefFoundError:org/apache/log4j/FileAppender] 在 com.caucho.loader.DynamicClassLoader.loadClass(DynamicClassLoader.java:1264) 在 com.caucho.loader.DynamicClassLoader.findClass(DynamicClassLoader.java:1149) 在 com.caucho.loader.DynamicClassLoader.loadClass(DynamicClassLoader.java:1072) 在 com.caucho.loader.DynamicClassLoader.loadClass(DynamicClassLoader.java:1021) 在 java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(Class.java:164) 在 org.apache.log4j.helpers.Loader.loadClass(Loader.java:160) 在 org.apache.log4j.helpers.OptionConverter.instantiateByClassName(OptionConverter.java:309) 在 org.apache.log4j.helpers.OptionConverter.instantiateByKey(OptionConverter.java:112) 在org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:620)
java.lang.NoClassDefFoundError: happens sporadically on Resin sever start up
This is on Resin 3.0.21
Using Java 1.5 on Linux machine...
I have a servlet defined on the web.xml to load the log4j.properties.
This is thrown when the servlet is trying to load on start up..
log4j-init: init log4j:ERROR Could not instantiate class [org.apache.log4j.DailyRollingFileAppender].
java.lang.ClassNotFoundException: org.apache.log4j.DailyRollingFileAppender [java.lang.NoClassDefFoundError: org/apache/log4j/FileAppender]
at com.caucho.loader.DynamicClassLoader.loadClass(DynamicClassLoader.java:1264)
at com.caucho.loader.DynamicClassLoader.findClass(DynamicClassLoader.java:1149)
at com.caucho.loader.DynamicClassLoader.loadClass(DynamicClassLoader.java:1072)
at com.caucho.loader.DynamicClassLoader.loadClass(DynamicClassLoader.java:1021)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:164)
at org.apache.log4j.helpers.Loader.loadClass(Loader.java:160)
at org.apache.log4j.helpers.OptionConverter.instantiateByClassName(OptionConverter.java:309)
at org.apache.log4j.helpers.OptionConverter.instantiateByKey(OptionConverter.java:112)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:620)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
最有可能的是,文件
log4j.jar
在类路径中被发现两次,从而导致类路径问题。 如果 log4J 被加载两次,一次在 Web 应用程序中,一次在 Resin 中,那么您可能会遇到这种混乱。 假设 log4j 已经存在于 Resin 中,如果它也存在于您的 Web 应用程序的类路径(lib 目录)中,则尝试将其从应用程序的 lib 目录中删除。Most likely, the file
log4j.jar
is found on the classpath twice, causing Classpath problems. If log4J gets loaded twice, once in the Web Application and once in Resin, then you can get this kind of confusion. Assuming log4j is already present in Resin, if it is also present in your web application's classpath (lib directory), then try removing it from your application's lib directory.我们发现这种情况通常发生在服务器上没有可用磁盘空间的情况下
We found out that this usually happens when there is no free disk space on the server
这可能不是“启动”而是“重新启动”的情况。
如果 log4j 加载到 webapp 中,log4j 的某些类不会在应用程序关闭时卸载,下次(重新)启动时将导致两次输入的情况(查看 Eddie 的帖子)。 解决办法是将log4j放到resin的lib/目录下。
It might be not "start" but "restart" situation.
Some classes of log4j are not unloaded on app's shutdown and next (re)start will cause the situation with twice entry (look at Eddie's post), if log4j loaded in webapp. The solution is to put log4j into resin's lib/ directory.