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) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) at java.lang.Class.forName0(Native Method) at 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)
答案 0 :(得分:2)
最有可能的是,文件log4j.jar
在类路径上找到两次,导致Classpath问题。如果log4J加载两次,一次加载到Web应用程序中,一次加载到Resin中,那么就会出现这种混乱。假设login中已存在log4j,如果它也存在于Web应用程序的类路径(lib目录)中,则尝试将其从应用程序的lib目录中删除。
答案 1 :(得分:1)
我们发现这通常发生在服务器上没有可用磁盘空间时
答案 2 :(得分:0)
可能不是“开始”而是“重启”的情况。
某些类型的log4j在应用程序关闭时没有卸载,而下一次(重新)启动将导致两次进入的情况(查看Eddie的帖子),如果在webapp中加载了log4j。解决方案是将log4j放入resin的lib /目录中。