Sunday, 11 January 2015

JBoss WildFly 8 : log4j not logging


For a newly installed JBoss WildFly 8 if your application is using log4j , there would not be any log in the file or console.


1. WHAT happened ?
 There is no log printed in the console from deployed application in JBoss WildFly 8 which powered by log4j.


2. WHY it happened ?

Because JBoss WildFly 8 is using its own log configuration as below not your application ones.
<module name="org.jboss.as.logging" xmlns="urn:jboss:module:1.3">
<properties>
<property name="jboss.api" value="private">
</property>
</properties>
<resources>
<resource-root path="wildfly-logging-8.2.0.Final.jar">
</resource-root></resources>
<dependencies>
<module name="javax.api"></module>
<module name="org.apache.log4j"></module>
<module name="org.jboss.as.controller"></module>
<module name="org.wildfly.security.manager"></module>
<module name="org.jboss.as.server"></module>
<module name="org.jboss.common-core"></module>
<module name="org.jboss.staxmapper"></module>
<module name="org.jboss.msc"></module>
<module name="org.jboss.logging"></module>
<module name="org.jboss.logmanager"></module>
<module name="org.jboss.modules"></module>
<module name="org.jboss.stdio"></module>
<module name="org.jboss.vfs"></module>
</dependencies>
</module>
view raw module.xml hosted with ❤ by GitHub

<subsystem xmlns="urn:jboss:domain:logging:2.0">
<console-handler name="CONSOLE">
<level name="DEBUG">
<formatter>
<named-formatter name="COLOR-PATTERN">
</named-formatter></formatter>
</level></console-handler>
<periodic-rotating-file-handler autoflush="true" name="FILE">
<formatter>
<named-formatter name="PATTERN">
</named-formatter></formatter>
<file path="server.log" relative-to="jboss.server.log.dir">
<suffix value=".yyyy-MM-dd">
<append value="true">
</append></suffix></file></periodic-rotating-file-handler>
<logger category="com.arjuna">
<level name="WARN">
</level></logger>
<logger category="org.apache.tomcat.util.modeler">
<level name="WARN">
</level></logger>
<logger category="org.jboss.as.config">
<level name="DEBUG">
</level></logger>
<logger category="sun.rmi">
<level name="WARN">
</level></logger>
<logger category="jacorb">
<level name="WARN">
</level></logger>
<logger category="jacorb.config">
<level name="ERROR">
</level></logger>
<root-logger>
<level name="INFO">
<handlers>
<handler name="CONSOLE">
<handler name="FILE">
</handler></handler></handlers>
</level></root-logger>
<formatter name="PATTERN">
<pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n">
</pattern-formatter></formatter>
<formatter name="COLOR-PATTERN">
<pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n">
</pattern-formatter></formatter>
</subsystem>
view raw standalone.xml hosted with ❤ by GitHub

 


3. HOW to resolve it 

Step 1 : let JBoss WildFly 8 to load log4j.xml or log4j.properties from deployed application not standalone.xml by adding : <use-deployment-logging-config value="false"/> as below :

<subsystem xmlns="urn:jboss:domain:logging:2.0">
<use-deployment-logging-config value="false">
<console-handler name="CONSOLE">
<level name="DEBUG">
<formatter>
<named-formatter name="COLOR-PATTERN">
</named-formatter></formatter>
</level></console-handler>
<periodic-rotating-file-handler autoflush="true" name="FILE">
<formatter>
<named-formatter name="PATTERN">
</named-formatter></formatter>
<file path="server.log" relative-to="jboss.server.log.dir">
<suffix value=".yyyy-MM-dd">
<append value="true">
</append></suffix></file></periodic-rotating-file-handler>
<logger category="com.arjuna">
<level name="WARN">
</level></logger>
<logger category="org.apache.tomcat.util.modeler">
<level name="WARN">
</level></logger>
<logger category="org.jboss.as.config">
<level name="DEBUG">
</level></logger>
<logger category="sun.rmi">
<level name="WARN">
</level></logger>
<logger category="jacorb">
<level name="WARN">
</level></logger>
<logger category="jacorb.config">
<level name="ERROR">
</level></logger>
<root-logger>
<level name="INFO">
<handlers>
<handler name="CONSOLE">
<handler name="FILE">
</handler></handler></handlers>
</level></root-logger>
<formatter name="PATTERN">
<pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n">
</pattern-formatter></formatter>
<formatter name="COLOR-PATTERN">
<pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n">
</pattern-formatter></formatter>
</use-deployment-logging-config></subsystem>
view raw standalone.xml hosted with ❤ by GitHub

Step 2 : use the logging function from deployed application not JBoss WildFly 8 by adding WEB-INF/classes/jboss-deployment-structure.xml

<jboss-deployment-structure xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<module-alias name="test">
<exclusions>
<module name="org.apache.log4j">
</module></exclusions>
</module-alias></deployment>
</jboss-deployment-structure>







You may refer to below for details on JBoss WildFly 8 logging configuration :

https://docs.jboss.org/author/display/WFLY8/Logging+Configuration#LoggingConfiguration-PerdeploymentLogging

5 comments:

  1. Thanks for this. I was tearing my hair out because I desperately needed to see the log and no amount of messing with my wildfly config was helping. Well done!

    ReplyDelete
    Replies
    1. Thank you for the comment , glad it helps.

      Delete
  2. I'm new in wildfly... wich files are been modify in this example?

    ReplyDelete
    Replies
    1. 1. ${JBOSS_HOME}\standalone\configuration\standalone.xml (if you are launching the server with standalone mode)
      2. ${project_location}\src\main\resources\jboss-deployment-structure.xml (if your project is maven powered)

      Delete
  3. Awersome !!

    worked like a charm.

    Kindly change your snippet as '/' is missing there (for above line only) and that might lead some naive user to some trouble.

    Thanks :)

    ReplyDelete

Flag Counter