奇怪的jboss控制台错误

ant*_*ant 13 java jboss log4j classloader maven

我正在为已经多模块的maven项目创建额外的模块.对于这个我希望一切都像其他模块(意味着依赖)一样只是为了测试hello world,然后我会去做一些更复杂的东西.当它部署到jboss服务器上时它确实打印了hello world,但是我在控制台上遇到了一些奇怪的错误,有没有人有类似的经历?我该如何解决?这里是 :

15:48:35,789 ERROR [STDERR] log4j:ERROR A "org.jboss.logging.appender.FileAppender" object is not assignable to a "org.apache.log4j.Appender" variable.
15:48:35,789 ERROR [STDERR] log4j:ERROR The class "org.apache.log4j.Appender" was loaded by 
15:48:35,790 ERROR [STDERR] log4j:ERROR [BaseClassLoader@9a8d9b{vfszip:/C:/jboss-5.1.0.GA/server/default/deploy/new-module-0.0.1-SNAPSHOT.war/}] whereas object of type 
15:48:35,790 ERROR [STDERR] log4j:ERROR "org.jboss.logging.appender.FileAppender" was loaded by [org.jboss.bootstrap.NoAnnotationURLClassLoader@506411].
15:48:35,790 ERROR [STDERR] log4j:ERROR Could not instantiate appender named "FILE".
Run Code Online (Sandbox Code Playgroud)

这是Appender xml的一部分

http://pastebin.com/X7Dgdrki

Pét*_*rök 18

首先检查你<server>/conf/jboss-log4j.xml的配置appender命名FILE(如果可以的话,在这里发布 - 这可能会给我们更多的线索).

进一步调查显示org.jboss.logging.appender.FileAppender实际实现了界面org.apache.log4j.Appender.所以这显然是一个类加载器冲突.org.apache.log4j.Appender当由两个不同的类加载器加载时,相同的类定义(在本例中)计为JVM的两个不同的类.

log4j.jar是否包含在你的战争中,或者你的server/lib目录中?如果是这样,您可以尝试删除它,看看它是否解决了问题.

更新:实际上最简单的解决方案是org.apache.log4j.FileAppender在jboss-log4j.xml中简单地改变appender的类型.

关于log4j.jar,我的意思是如果它出现在你的战争中,它(和副本org.apache.log4j.Appender)会被war类加载器加载(BaseClassLoader@9a8d9b在你的错误消息中).这会导致类加载器冲突.因此,如果您不在战争中部署log4j.jar,则错误可能会消失.这与Maven有关,只是在你的pom中配置了依赖关系.对于这个小实验,您只需手动从战争中删除log4j.jar; 如果这解决了问题,请将pom中的log4j依赖关系配置为"提供",例如:

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
        <scope>provided</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

如果log4j.jar不在您的战争中,它可能仍然在server/default/lib目录中 - 请检查它是否存在,请尝试将其删除.