I need to deploy multiple war files on a server-group in wildfly-domain. When I deploy only one application, configuration works perfectly fine and logs are generated as expected. But, after deploying second war file, all logs from deployment one and deployment two are written into second deployment's log file. It seems to be a bug in wildfly per deployment logging. Any suggestions?
I have configured RollingFileAppender inside log4j.xml.
Log Config: App1
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<appender name="logFile" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="${jboss.server.log.dir}/deploy1.log" />
<param name="Append" value="true" />
<param name="Threshold" value="TRACE" />
<param name="MaxFileSize" value="25MB" />
<param name="MaxBackupIndex" value="30" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>
<logger name="com.akash.deploy1">
<level value="DEBUG" />
</logger>
<root>
<level value="INFO" />
<appender-ref ref="logFile" />
</root>
</log4j:configuration>
Log Config: App2
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<appender name="logFile" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="${jboss.server.log.dir}/deploy2.log" />
<param name="Append" value="true" />
<param name="Threshold" value="TRACE" />
<param name="MaxFileSize" value="25MB" />
<param name="MaxBackupIndex" value="30" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>
<logger name="com.akash.deploy2">
<level value="DEBUG" />
</logger>
<root>
<level value="INFO" />
<appender-ref ref="logFile" />
</root>
</log4j:configuration>
Domain Config
<add-logging-api-dependencies value="false"/>
jboss-deployment-structure
<jboss-deployment-structure>
<deployment>
<exclusions>
<!-- Exclude container version of hibernate. By default its version 4, we want
bundled version 3 loaded -->
<module name="org.hibernate" slot="main" />
<module name="org.hibernate.validator" />
<module name="org.hibernate.validator.cdi" slot="main" />
</exclusions>
<dependencies>
<module name="org.apache.commons.logging" />
<module name="org.apache.commons.collections" />
<module name="org.dom4j" />
<module name="org.apache.log4j" />
<module name="org.slf4j" />
<module name="org.apache.camel" />
<module name="org.springframework" />
<module name="org.hibernate" slot="3.6.10" />
<module name="net.sf.ehcache" />
<module name="org.jboss.as.jmx" />
<module name="org.apache.xerces" />
<module name="asm.asm" />
<module name="org.jboss.msc" />
<module name="org.wildfly.clustering.singleton" />
<module name="org.jboss.as.server" />
<module name="com.oracle.ojdbc7" />
<module name="org.wildfly.clustering.server"/>
</dependencies>
<exclude-subsystems>
<subsystem name="logging" />
</exclude-subsystems>
</deployment>
</jboss-deployment-structure>
The per-deployment logging works based on a log context. Since you're excluding the logging subsystem in your jboss-deployment-structure.xml
the same log context is used for both deployments.
To get this to work as you expect you need to set the add-logging-api-dependencies
back to true
. In CLI:
/profile=default/subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=true)
Then in your jboss-deployment-structure.xml
remove the exclusion of the logging subsystem. You can also remove the 3 logging includes as those should be added automatically.
<jboss-deployment-structure>
<deployment>
<exclusions>
<!-- Exclude container version of hibernate. By default its version 4, we want
bundled version 3 loaded -->
<module name="org.hibernate" slot="main" />
<module name="org.hibernate.validator" />
<module name="org.hibernate.validator.cdi" slot="main" />
</exclusions>
<dependencies>
<module name="org.apache.commons.collections" />
<module name="org.dom4j" />
<module name="org.apache.camel" />
<module name="org.springframework" />
<module name="org.hibernate" slot="3.6.10" />
<module name="net.sf.ehcache" />
<module name="org.jboss.as.jmx" />
<module name="org.apache.xerces" />
<module name="asm.asm" />
<module name="org.jboss.msc" />
<module name="org.wildfly.clustering.singleton" />
<module name="org.jboss.as.server" />
<module name="com.oracle.ojdbc7" />
<module name="org.wildfly.clustering.server"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
Some of those module dependencies look a bit suspicious as well. I'm not sure why you'd need org.jboss.as.jmx
, org.jboss.msc
, org.wildfly.clustering.singleton
, org.jboss.as.server
or org.wildfly.clusttering.server
.