无法将 Log4J2 与 Wildfly 一起使用
Cannot use Log4J2 with Wildfly
我正在开发一个使用 log4j2 进行日志记录的 JEE 应用程序。我正在尝试将它部署到 Wildfly 15 上,但我无法正确记录它,显示
Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
这是我所做的:
- 我已经将 log4j2-api.jar 作为系统模块添加到 Wildfly (system/layers/base/org/apache/log4j2/main) 中,使用简单的 module.xml.
- 我从 https://github.com/jboss-logging/log4j2-jboss-logmanager 中获取了代码,构建了一个 JAR,并将其作为系统模块添加到 Wildfly (system/layers/base/org/jboss/log4j2/logmanager/main),其中 module.xml 定义了提供的服务:
<provides>
<service name="org.apache.logging.log4j.spi.Provider">
<with-class name="org.jboss.logmanager.log4j.JBossProvider" />
</service>
</provides>
- 我添加了 org.apache.log4j2 和 org.jboss.log4j2.logmanager 作为 org.jboss.logmanager 模块的依赖项,在后者上声明
services="export"
.
我知道 https://issues.redhat.com/browse/WFCORE-482,但我似乎无法从中得出正确的结论。
任何人都可以帮助或知道如何进一步诊断这里发生了什么吗?
作为完整参考,org.jboss 的 module.xml。log4j2.logmanager 如下所示:
<module xmlns="urn:jboss:module:1.8" name="org.jboss.log4j2.logmanager">
<resources>
<resource-root path="log4j2-jboss-logmanager.jar"/>
</resources>
<dependencies>
<module name="org.apache.log4j2"/>
<module name="org.jboss.logmanager"/>
</dependencies>
<provides>
<service name="org.apache.logging.log4j.spi.Provider">
<with-class name="org.jboss.logmanager.log4j.JBossProvider" />
</service>
</provides>
</module>
…尽管我已经尝试将 org.jboss.logmanager 引用为 org.jboss.log4j2.logmanager 的依赖项,反之亦然。
org.apache.log4j2 的 module.xml 看起来像这样:
<module xmlns="urn:jboss:module:1.1" name="org.apache.log4j2">
<resources>
<resource-root path="log4j-api.jar"/>
</resources>
</module>
在您的 org.jboss.log4j2.logmanager
module.xml 中,您不需要那个 <provides/>
定义。除此之外,您的 module.xml 文件看起来是正确的。
接下来,您需要在部署中定义 org.jboss.log4j2.logmanager
和 org.apache.log4j2
模块。如果您使用的是 jboss-deployment-structure.xml
,则 WAR 看起来类似于以下内容:
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.apache.log4j2"/>
<module name="org.jboss.log4j2.logmanager" export="true"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
一个小注意事项是那些可能应该直接位于 modules
目录下,而不是 modules/system/layers/base
目录下。虽然它不会破坏任何真正适用于服务器提供的模块的内容。
我正在开发一个使用 log4j2 进行日志记录的 JEE 应用程序。我正在尝试将它部署到 Wildfly 15 上,但我无法正确记录它,显示
Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
这是我所做的:
- 我已经将 log4j2-api.jar 作为系统模块添加到 Wildfly (system/layers/base/org/apache/log4j2/main) 中,使用简单的 module.xml.
- 我从 https://github.com/jboss-logging/log4j2-jboss-logmanager 中获取了代码,构建了一个 JAR,并将其作为系统模块添加到 Wildfly (system/layers/base/org/jboss/log4j2/logmanager/main),其中 module.xml 定义了提供的服务:
<provides>
<service name="org.apache.logging.log4j.spi.Provider">
<with-class name="org.jboss.logmanager.log4j.JBossProvider" />
</service>
</provides>
- 我添加了 org.apache.log4j2 和 org.jboss.log4j2.logmanager 作为 org.jboss.logmanager 模块的依赖项,在后者上声明
services="export"
.
我知道 https://issues.redhat.com/browse/WFCORE-482,但我似乎无法从中得出正确的结论。
任何人都可以帮助或知道如何进一步诊断这里发生了什么吗?
作为完整参考,org.jboss 的 module.xml。log4j2.logmanager 如下所示:
<module xmlns="urn:jboss:module:1.8" name="org.jboss.log4j2.logmanager">
<resources>
<resource-root path="log4j2-jboss-logmanager.jar"/>
</resources>
<dependencies>
<module name="org.apache.log4j2"/>
<module name="org.jboss.logmanager"/>
</dependencies>
<provides>
<service name="org.apache.logging.log4j.spi.Provider">
<with-class name="org.jboss.logmanager.log4j.JBossProvider" />
</service>
</provides>
</module>
…尽管我已经尝试将 org.jboss.logmanager 引用为 org.jboss.log4j2.logmanager 的依赖项,反之亦然。
org.apache.log4j2 的 module.xml 看起来像这样:
<module xmlns="urn:jboss:module:1.1" name="org.apache.log4j2">
<resources>
<resource-root path="log4j-api.jar"/>
</resources>
</module>
在您的 org.jboss.log4j2.logmanager
module.xml 中,您不需要那个 <provides/>
定义。除此之外,您的 module.xml 文件看起来是正确的。
接下来,您需要在部署中定义 org.jboss.log4j2.logmanager
和 org.apache.log4j2
模块。如果您使用的是 jboss-deployment-structure.xml
,则 WAR 看起来类似于以下内容:
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.apache.log4j2"/>
<module name="org.jboss.log4j2.logmanager" export="true"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
一个小注意事项是那些可能应该直接位于 modules
目录下,而不是 modules/system/layers/base
目录下。虽然它不会破坏任何真正适用于服务器提供的模块的内容。