我创建了一个在JBoss AS7上运行的aribaweb应用程序。在JBoss中,AS7使用org.jboss.logmanager.log4j.BridgeLogger
类进行Logger实现(这里BridgeLogger类扩展为org.apache.log4j.Logger
)。我在JBoss AS7服务器中部署了一个aribaweb应用程序。内部aribaweb应用程序也使用相同的Log4J实现进行日志记录,但它使用ariba.util.log.Logger
类(此处ariba Logger类扩展为org.apache.log4j.Logger
)用于Logger实现。
但是aribaweb应用程序显示没有结果,因为某些类型转换异常与记录器问题有关,这里有几行我的异常
java.lang.ExceptionInInitializerError
at ariba.util.core.ClassUtil.classForName(ClassUtil.java:259)
at ariba.util.core.ClassUtil.classForName(ClassUtil.java:182)
at ariba.ui.aribaweb.util.AWClassLoader.getClass(AWClassLoader.java:49)
at ariba.ui.aribaweb.util.AWUtil.classForName(AWUtil.java:201)
at ariba.ui.aribaweb.core.AWConcreteApplication.createApplication(AWConcreteApplication.java:145)
at ariba.ui.servletadaptor.MyAWDispatcherServlet.createApplication(RimsAWDispatcherServlet.java:25)
at ariba.ui.servletadaptor.AWDispatcherServlet.init(AWDispatcherServlet.java:54)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1202) [jbossweb-7.0.13.Final.jar:]
... 246 more
Caused by: java.lang.ClassCastException: org.jboss.logmanager.log4j.BridgeLogger cannot be cast to ariba.util.log.Logger
at ariba.util.log.Log.(Log.java:90)
在ariba.util.log.Log.java
类上发生的异常,包含以下行
public static final Logger startup =
(Logger)Logger.getLogger("startup");
我不了解JBoss日志配置。 JBoss AS7中是否有与“startup”同名的记录器?或者是否有任何配置来解决这个问题?
答案 0 :(得分:3)
这是由于aribaweb和JBoss AS7的Logger实现冲突。
JBoss AS7默认支持Log4J实现。但是在JBoss AS7服务器org.apache.log4j.Logger
的情况下,类被自己的实现包裹org.jboss.logmanager.log4j.BridgeLogger
。在aribaweb的情况下org.apache.log4j.Logger
类由aribas实现(ariba.util.log.Logger
)包装。要解决此问题,您需要从war文件中删除JBoss AS7的log4j模块依赖项。为此,您需要使用以下代码行创建jboss-deployment-structure.xml
文件
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.apache.log4j" />
</exclusions>
</deployment>
</jboss-deployment-structure>
您需要在war文件的META-INF文件夹中部署此文件。