0

我正在开发一个使用 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...

这是我所做的:

  • 我使用简单的 module.xml 将 log4j2-api.jar 作为系统模块添加到 Wildfly (system/layers/base/org/apache/log4j2/main)。
  • 我从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.log4j2.logmanager 的 module.xml 如下所示:

<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>
4

1 回答 1

0

在您的org.jboss.log4j2.logmanagermodule.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目录下。尽管它不会破坏服务器提供的模块真正意义上的任何东西。

于 2020-05-19T19:22:19.077 回答