Wildfly 15部署Log4j2日志的JEE应用失败求助
I’ve run into nearly identical issues setting up Log4j2 on WildFly 15 before—let’s walk through targeted fixes and diagnostic steps to get your logging working properly:
First, Verify Deployment Structure Configuration
WildFly’s module system enforces strict classpath isolation, so your application needs explicit access to the Log4j2 modules you added. Create a jboss-deployment-structure.xml file (place it in WEB-INF for WARs or META-INF for EARs) with these entries:
<jboss-deployment-structure> <deployment> <dependencies> <module name="org.apache.log4j2" export="true"/> <module name="org.jboss.log4j2.logmanager" export="true"/> </dependencies> <!-- Exclude WildFly's default logging subsystem to avoid conflicts --> <exclude-subsystems> <subsystem name="logging"/> </exclude-subsystems> </deployment> </jboss-deployment-structure>
Fix Module Dependencies & Service Visibility
Your current module configurations have a few gaps that prevent the JBossProvider from being detected:
Update
org.apache.log4j2module.xml: Add basic API dependencies to ensure compatibility:<module xmlns="urn:jboss:module:1.8" name="org.apache.log4j2"> <resources> <resource-root path="log4j-api.jar"/> </resources> <dependencies> <module name="javax.api"/> </dependencies> </module>Adjust
org.jboss.log4j2.logmanagermodule.xml: Ensure you import services fromorg.jboss.logmanagerand add required logging dependencies:<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" services="import"/> <module name="org.jboss.logging"/> </dependencies> <provides> <service name="org.apache.logging.log4j.spi.Provider"> <with-class name="org.jboss.logmanager.log4j.JBossProvider" /> </service> </provides> </module>Check
org.jboss.logmanagermodule dependencies: Confirm it exports the Log4j2 bridge module to make the provider visible system-wide:<module xmlns="urn:jboss:module:1.8" name="org.jboss.logmanager"> <!-- Keep existing resources and dependencies --> <dependencies> <!-- Add this line --> <module name="org.jboss.log4j2.logmanager" services="export"/> </dependencies> </module>
Validate Version Compatibility
Mismatched versions between log4j-api.jar and log4j2-jboss-logmanager.jar are a common culprit. Ensure:
- Your
log4j-apiversion is compatible with thelog4j2-jboss-logmanagerbuild you’re using (e.g., Log4j2 2.17.x pairs withlog4j2-jboss-logmanager1.1.x releases). - Remove any Log4j2-related JARs from your application’s
WEB-INF/lib—these will conflict with WildFly’s module-provided versions.
Enable Module Debugging for Deep Diagnostics
If issues persist, start WildFly with module debugging enabled to trace how modules and services are loaded:
./standalone.sh -Djboss.modules.debug=true
Look for logs related to org.apache.logging.log4j.spi.Provider—you’ll see if the JBossProvider is being detected or if there’s a classpath conflict blocking it.
Clean WildFly Cache
Always clear WildFly’s cache after modifying modules to ensure fresh loading:
- Delete contents of
standalone/data/contentandstandalone/tmp - Restart WildFly and redeploy your application
内容的提问来源于stack exchange,提问作者stmoebius

