java - 奇怪的 jboss 控制台错误

标签 java maven jboss log4j classloader

我正在为已经是多模块的 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".

这里是Appender xml的部分

http://pastebin.com/X7Dgdrki

最佳答案

首先检查你的<server>/conf/jboss-log4j.xml用于配置名为 FILE 的附加程序(如果可以的话,把它贴在这里——这可能会给我们更多线索)。

进一步调查显示org.jboss.logging.appender.FileAppender实际上实现了接口(interface) org.apache.log4j.Appender .所以这显然是一个类加载器冲突。相同的类定义(在本例中为 org.apache.log4j.Appender ),当由两个不同的类加载器加载时,对于 JVM 而言被视为两个不同的类。

log4j.jar 是包含在你的 war 中,还是在你的 server/lib 目录中?如果是这样,您可以尝试将其删除并查看是否可以解决问题。

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

关于 log4j.jar,我的意思是,如果它存在于您的 war 中,它(以及 org.apache.log4j.Appender 的副本)将由 war 类加载器(您的错误消息中的 BaseClassLoader@9a8d9b)加载。这会导致类加载器冲突。因此,如果您不在 war 中部署 log4j.jar,错误可能会消失。这仅与 Maven 相关,因为依赖项是在您的 pom.xml 中配置的。对于这个小实验,您可以简单地手动从 war 中删除 log4j.jar;如果这解决了问题,请将 pom 中的 log4j 依赖项配置为“已提供”,例如:

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
        <scope>provided</scope>
    </dependency>

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

关于java - 奇怪的 jboss 控制台错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2536578/

相关文章:

java - 我可以只加载一次大量数据并在每个请求中使用它吗?

JBoss 的 SSL 证书导入和配置

java - Jboss 服务器错误 : Failed to start service jboss. deployment.unit ."jbpm-console.war"

Hibernate二级缓存更新

java - JDBC4 插入日期 "0001-01-01"

java - 如何制作带有类的 if 语句(java)

java - Jenkins 构建失败

maven - 找不到 application.xml 中定义的子模块 [portal-service-ejb-1.4-SNAPSHOT.jar]

java - 如何最小化UDP丢包

java - 如何更改 Maven 登陆页面