java.lang.ClassCastException - Log4j

标签 java log4j weblogic classloader apache-commons-logging

启动托管服务器时,我在 WebLogic 12c 托管服务器输出文件中看到以下与 log4j 相关的 ClassCastException。我在 WAR 的 lib 目录中捆绑了 commons-logging-1.1.1.jar 和 log4j-1.2.17.jar,并且那里没有这些库的其他版本。我还粘贴了处理请求时生成的托管服务器日志文件错误。我应该使用 WebLogic 12c 附带的 log4j 和 commons 日志记录吗?我在模块目录中看到这些:com.bea.core.apache.commons.logging_1.1.2.jar 和 com.bea.core.apache.log4j_1.2.0.0_1-2-15.jar。我以前没有遇到过 log4j 和 WebLogic 的问题。

输出文件:

jadomain.lang.ClassCastException: org.apache.log4j.RollingFileAppender cannot be cast to org.apache.log4j.Appender
        at org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.jadomain:248)
        at org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.jadomain:176)
        at org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.jadomain:191)
        at org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.jadomain:523)
        at org.apache.log4j.xml.DOMConfigurator.parseCategory(DOMConfigurator.jadomain:436)
        at org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.jadomain:1004)
        at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.jadomain:872)
        at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.jadomain:778)
        at org.apache.log4j.xml.DOMConfigurator.configure(DOMConfigurator.jadomain:906)
        at com.domain.d.app.restwrapper.ContextListener.contextInitialized(ContextListener.jadomain:37)
        at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.jadomain:66

日志文件:

]] Root cause of ServletException.
jadomain.lang.LinkageError: loader constraint violation: when resolving method "org.apache.log4j.LogMF.entering(Lorg/apache/log4j/Logger;Ljadomain/lang/String;Ljadomain/lang/String;)V" the class loader (instance of weblogic/utils/classloaders/ChangeAwareClassLoader) of the current class, com/domain/d/app/restwrapper/appResource, and the class loader (instance of weblogic/utils/classloaders/GenericClassLoader) for resolved class, org/apache/log4j/LogMF, have different Class objects for the type /lang/String;)V used in the signature
        at com.domain.d.app.restwrapper.appResource.addQuery(appResource.jadomain:244)
        at com.domain.d.app.restwrapper.appResource.addQuery(appResource.jadomain:224)
        at com.domain.d.app.restwrapper.appResource$Proxy$_$$_WeldClientProxy.addQuery(appResource$Proxy$_$$_WeldClientProxy.jadomain)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jadomain:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jadomain:43)

最佳答案

两个版本的 log4j 之间存在冲突。一个是从服务器的类路径加载的,另一个是从 Web 应用程序的类路径加载的。 要解决此问题,您可以将 Web 应用程序设置为仅使用应用程序中的应用程序。更新您的 weblogic.xml 文件并添加以下标记:

<prefer-web-inf-classes>true</prefer-web-inf-classes> 

关于java.lang.ClassCastException - Log4j,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37473541/

相关文章:

grails - Grails log4j配置-配置log4j时出错:记录器丢失

java - log4j过滤方法

将 EAR 部署到 WebLogic : cvc-complex-type. 2.4c 的 Eclipse 验证错误:预期元素 'module@http://java.sun.com/xml/ns/javaee'

weblogic - 如何通过 WLST 一次启动和停止多个 weblogic 托管服务器

java - Java 包围字符方法

java - 使用 MVC 的 Blackjack Java

java - 在Java中访问SOAP服务

java - 重定向 System.out 和 System.err

java - 如何使用java pdfbox库在单个页面中设置多个书签

java - 无法加载 ejb-jar.xml 中定义的类