3 Replies Latest reply on Mar 4, 2010 9:33 AM by komyg

    Log4j inside Jboss

    komyg

      Hi, I've created a Web Service application inside Jboss 4.2.2-GA and I want to set up the jboss log4j configuration so that my Web Service logs inside a custom log file (not inside the server.xml).

      To do this I've altered the jboss-log4j.xml file to create another appender. This file is below:

       

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

      <!-- ===================================================================== -->
      <!--                                                                       -->
      <!--  Log4j Configuration                                                  -->
      <!--                                                                       -->
      <!-- ===================================================================== -->

      <!-- $Id: jboss-log4j.xml 65459 2007-09-19 00:25:51Z dimitris@jboss.org $ -->

      <!--
         | For more configuration infromation and examples see the Jakarta Log4j
         | owebsite: http://jakarta.apache.org/log4j
      -->

      <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">

         <!-- ================================= -->
         <!-- Preserve messages in a local file -->
         <!-- ================================= -->

         <!-- A time/date based rolling appender -->
         <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
            <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
            <param name="File" value="${jboss.server.log.dir}/server.log"/>
            <param name="Append" value="false"/>

            <!-- Rollover at midnight each day -->
            <param name="DatePattern" value="'.'yyyy-MM-dd"/>

            <!-- Rollover at the top of each hour
            <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
            -->

            <layout class="org.apache.log4j.PatternLayout">
               <!-- The default pattern: Date Priority [Category] Message\n -->
               <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>

               <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
               <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
                -->
            </layout>
         </appender>

         <!-- A size based file rolling appender
         <appender name="FILE" class="org.jboss.logging.appender.RollingFileAppender">
           <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
           <param name="File" value="${jboss.server.log.dir}/server.log"/>
           <param name="Append" value="false"/>
           <param name="MaxFileSize" value="500KB"/>
           <param name="MaxBackupIndex" value="1"/>

           <layout class="org.apache.log4j.PatternLayout">
             <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
           </layout>       
         </appender>
         -->

         <!-- ============================== -->
         <!-- Append messages to the console -->
         <!-- ============================== -->

         <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
            <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
            <param name="Target" value="System.out"/>
            <param name="Threshold" value="INFO"/>

            <layout class="org.apache.log4j.PatternLayout">
               <!-- The default pattern: Date Priority [Category] Message\n -->
               <!-- <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/> -->
               <param name="ConversionPattern" value="%-5p [%c] (%t:%x) %m%n"/>
            </layout>
         </appender>
       
         <!-- ====================== -->
         <!-- More Appender examples -->
         <!-- ====================== -->

         <!-- Buffer events and log them asynchronously
         <appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
           <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
           <appender-ref ref="FILE"/>
           <appender-ref ref="CONSOLE"/>
           <appender-ref ref="SMTP"/>
         </appender>
         -->

         <!-- EMail events to an administrator
         <appender name="SMTP" class="org.apache.log4j.net.SMTPAppender">
           <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
           <param name="Threshold" value="ERROR"/>
           <param name="To" value="admin@myhost.domain.com"/>
           <param name="From" value="nobody@myhost.domain.com"/>
           <param name="Subject" value="JBoss Sever Errors"/>
           <param name="SMTPHost" value="localhost"/>
           <param name="BufferSize" value="10"/>
           <layout class="org.apache.log4j.PatternLayout">
             <param name="ConversionPattern" value="[%d{ABSOLUTE},%c{1}] %m%n"/>
           </layout>
         </appender>
         -->

         <!-- Syslog events
         <appender name="SYSLOG" class="org.apache.log4j.net.SyslogAppender">
           <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
           <param name="Facility" value="LOCAL7"/>
           <param name="FacilityPrinting" value="true"/>
           <param name="SyslogHost" value="localhost"/>
           <layout class="org.apache.log4j.PatternLayout">
             <param name="ConversionPattern" value="[%d{ABSOLUTE},%c{1}] %m%n"/>
           </layout>
         </appender>
         -->

         <!-- Log events to JMS (requires a topic to be created)
         <appender name="JMS" class="org.apache.log4j.net.JMSAppender">
           <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
           <param name="Threshold" value="ERROR"/>
           <param name="TopicConnectionFactoryBindingName" value="java:/ConnectionFactory"/>
           <param name="TopicBindingName" value="topic/MyErrorsTopic"/>
         </appender>
         -->

         <!-- Log events through SNMP
         <appender name="TRAP_LOG" class="org.apache.log4j.ext.SNMPTrapAppender">
           <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
           <param name="ImplementationClassName" value="org.apache.log4j.ext.JoeSNMPTrapSender"/>
           <param name="ManagementHost" value="127.0.0.1"/>
           <param name="ManagementHostTrapListenPort" value="162"/>
           <param name="EnterpriseOID" value="1.3.6.1.4.1.24.0"/>
           <param name="LocalIPAddress" value="127.0.0.1"/>
           <param name="LocalTrapSendPort" value="161"/>
           <param name="GenericTrapType" value="6"/>
           <param name="SpecificTrapType" value="12345678"/>
           <param name="CommunityString" value="public"/>
           <param name="ForwardStackTraceWithTrap" value="true"/>
           <param name="Threshold" value="DEBUG"/>
           <param name="ApplicationTrapOID" value="1.3.6.1.4.1.24.12.10.22.64"/>
           <layout class="org.apache.log4j.PatternLayout">
                  <param name="ConversionPattern" value="%d,%p,[%t],[%c],%m%n"/>
           </layout>
         </appender>
         -->

         <!--  Emit events as JMX notifications
         <appender name="JMX" class="org.jboss.monitor.services.JMXNotificationAppender">
            <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
           
            <param name="Threshold" value="WARN"/>
            <param name="ObjectName" value="jboss.system:service=Logging,type=JMXNotificationAppender"/>
           
            <layout class="org.apache.log4j.PatternLayout">
               <param name="ConversionPattern" value="%d %-5p [%c] %m"/>
            </layout>
         </appender>
         -->
        
         <!-- ================ -->
         <!-- Limit categories -->
         <!-- ================ -->

         <!-- Limit the org.apache category to INFO as its DEBUG is verbose -->
         <category name="org.apache">
            <priority value="INFO"/>
         </category>

         <!-- Limit the jacorb category to WARN as its INFO is verbose -->
         <category name="jacorb">
            <priority value="WARN"/>
         </category>
        
         <!-- Limit the org.jgroups category to WARN as its INFO is verbose -->
         <category name="org.jgroups">
            <priority value="WARN"/>
         </category>
        
         <!-- Limit the org.quartz category to INFO as its DEBUG is verbose -->
         <category name="org.quartz">
            <priority value="INFO"/>
         </category>

         <!-- Limit JBoss categories
         <category name="org.jboss">
            <priority value="INFO"/>
         </category>
         -->

         <!-- Limit the JSR77 categories -->
         <category name="org.jboss.management">
            <priority value="INFO"/>
         </category>

         <!-- Show the evolution of the DataSource pool in the logs [inUse/Available/Max]
         <category name="org.jboss.resource.connectionmanager.JBossManagedConnectionPool">
           <priority value="TRACE"/>
         </category>
         -->
        
         <!-- Limit the org.jboss.serial (jboss-serialization) to INFO as its DEBUG is verbose -->
         <category name="org.jboss.serial">
            <priority value="INFO"/>
         </category>
        
         <!-- Decrease the priority threshold for the org.jboss.varia category
         <category name="org.jboss.varia">
           <priority value="DEBUG"/>
         </category>
         -->

         <!-- Enable JBossWS message tracing
         <category name="org.jboss.ws.core.MessageTrace">
          <priority value="TRACE"/>
         </category>
         -->

         <!--
            | An example of enabling the custom TRACE level priority that is used
            | by the JBoss internals to diagnose low level details. This example
            | turns on TRACE level msgs for the org.jboss.ejb.plugins package and its
            | subpackages. This will produce A LOT of logging output.
            |
            | Note: since jboss AS 4.2.x, the trace level is supported natively by
            | log4j, so although the custom org.jboss.logging.XLevel priority will
            | still work, there is no need to use it. The two examples that follow
            | will both enable trace logging.
         <category name="org.jboss.system">
           <priority value="TRACE" class="org.jboss.logging.XLevel"/>
         </category>
         <category name="org.jboss.ejb.plugins">
           <priority value="TRACE"/>
         </category>
         -->
       
         <!--
             | Logs these events to SNMP:
                 - server starts/stops
                 - cluster evolution (node death/startup)
                 - When an EJB archive is deployed (and associated verified messages)
                 - When an EAR archive is deployed
                
         <category name="org.jboss.system.server.Server">
           <priority value="INFO" />
           <appender-ref ref="TRAP_LOG"/>
         </category>
       
         <category name="org.jboss.ha.framework.interfaces.HAPartition.lifecycle">
           <priority value="INFO" />
           <appender-ref ref="TRAP_LOG"/>
         </category>

         <category name="org.jboss.deployment.MainDeployer">
           <priority value="ERROR" />
           <appender-ref ref="TRAP_LOG"/>
         </category>
        
         <category name="org.jboss.ejb.EJBDeployer">
           <priority value="INFO" />
           <appender-ref ref="TRAP_LOG"/>
         </category>
        
         <category name="org.jboss.deployment.EARDeployer">
           <priority value="INFO" />
           <appender-ref ref="TRAP_LOG"/>
         </category>
         -->

         <!-- Clustering logging -->
         <!-- Uncomment the following to redirect the org.jgroups and
            org.jboss.ha categories to a cluster.log file.

         <appender name="CLUSTER" class="org.jboss.logging.appender.RollingFileAppender">
           <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
           <param name="File" value="${jboss.server.log.dir}/cluster.log"/>
           <param name="Append" value="false"/>
           <param name="MaxFileSize" value="500KB"/>
           <param name="MaxBackupIndex" value="1"/>

           <layout class="org.apache.log4j.PatternLayout">
             <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
           </layout>
         </appender>
         <category name="org.jgroups">
           <priority value="DEBUG" />
           <appender-ref ref="CLUSTER"/>
         </category>
         <category name="org.jboss.ha">
           <priority value="DEBUG" />
           <appender-ref ref="CLUSTER"/>
         </category>
         -->
        
         <!-- Afis Appender -->
        
         <appender name="AfisAppender" class="org.jboss.logging.appender.DailyRollingFileAppender">
            <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
            <param name="File" value="${jboss.server.log.dir}/afis_interface.log"/>
            <param name="Append" value="false"/>

            <!-- Rollover at midnight each day -->
            <param name="DatePattern" value="'.'yyyy-MM-dd"/>

            <layout class="org.apache.log4j.PatternLayout">
               <param name="ConversionPattern" value="%d %-5p [%c] (%t:%x) %m%n"/>
            </layout>
         </appender>
        
         <category name="AfisLogger">
            <appender-ref ref="AfisAppender"/>
            <appender-ref ref="CONSOLE"/>
            <priority value="DEBUG"/>
         </category>
        
         <!-- ======================= -->
         <!-- Setup the Root category -->
         <!-- ======================= -->

         <root>
            <appender-reg ref="AfisAppender"/>
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="FILE"/>
         </root>

      </log4j:configuration>


      After that I created a logger inside my Web Service with the same name as the category tag and logged the message received by the service:

       

      logger = Logger.getLogger("AfisLogger");
      logger.debug(message);

       

      However I noticed that even though the log file afis_interfaces.log is indeed created, it remains empty as if I wasn't writing anything to it.

      Please help me.

      Thanks,
      Komyg

        • 1. Re: Log4j inside Jboss
          peterj

          I used your jboss-log4j.xml file exactly as you posted, changed one of my apps to write to the AfisLogger (I use commons-logging):

           

            private Log log = LogFactory.getLog("AfisLogger");

            ...

            log.debug(...);

           

          and got entries in the afis_interface.log file:

           

          2010-03-02 10:29:38,311 DEBUG [AfisLogger] (http-127.0.0.1-8080-1:) Another vote for JBoss from 127.0.0.1.

           

          Are you sure you are using the correct logger name in your code? Are you sure your code got compiled and deployed (that is, you are not running an older version before adding the logging).

          • 2. Re: Log4j inside Jboss
            komyg

            Hi, I am using my code exactly as I posted:

             

          • Logger logger = Logger.getLogger("AfisLogger");
          • logger.debug(message);

          • And I am sure that I've deployed the right version.


            Do I have to configure log4j before getting the Logger object? I mean, do I have to add a line like: DOMConfigurator.configure("jboss-log4j.xml"); to make it work?

             

            Thanks,

            Felipe

            • 3. Re: Log4j inside Jboss
              komyg

              Hi, I did it!!!

               

              Turns out that I was using the org.apache.log4j.Logger class when I should be using the org.jboss.logging.Logger class instead.

               

              Thanks,

              Felipe