使用log4j在一个应用程序中配置两个记录器

时间:2013-10-29 12:23:28

标签: logging log4j jboss7.x classcastexception

我创建了一个在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”同名的记录器?或者是否有任何配置来解决这个问题?

1 个答案:

答案 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文件夹中部署此文件。