我正在使用使用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>
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>
在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
目录下。尽管它并没有破坏服务器所提供模块的真正含义。