无法将 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...

这是我所做的:

    <provides>
        <service name="org.apache.logging.log4j.spi.Provider">
            <with-class name="org.jboss.logmanager.log4j.JBossProvider" />
        </service>
    </provides>

我知道 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.logmanagerorg.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 目录下。虽然它不会破坏任何真正适用于服务器提供的模块的内容。