4 Replies Latest reply on Jun 24, 2006 1:39 PM by casadelnorte

    Convenience class not printing Log4J debug statements

      I'm hoping someone brighter than me can figure this out...

      I have a convenience class, ApplicationUtil, that contains a few application-specific functions.

      In this case, my log4j.xml file contains the following:

       <category name="com.imcadmin.application.ApplicationUtil">
       <priority value="DEBUG" />
       <appender-ref ref="IMCADMINLOG" />
       </category>
      

      which apparently works, sort of, except that the logger.debug messages don't print. Yet logger.isDebugEnabled() returns true. I have many other classes that work just fine with debug - this is the first time I've seen this.

      Here's a cut/paste from the output of the application:

      19:32:00,027 INFO [ApplicationUtil] logger.isDebugEnabled() = true
      19:32:00,027 INFO [ApplicationUtil] ISDEBUGENABLED runScheduledJobOnThisServer(Service Opt Out Handler) called
      19:32:00,028 INFO [ApplicationUtil] TEST INFO runScheduledJobOnThisServer(Service Opt Out Handler) called
      19:32:00,029 WARN [ApplicationUtil] TEST WARN runScheduledJobOnThisServer(Service Opt Out Handler) called
      19:32:00,029 ERROR [ApplicationUtil] TEST ERROR runScheduledJobOnThisServer(Service Opt Out Handler) called
      19:32:00,029 FATAL [ApplicationUtil] TEST FATAL runScheduledJobOnThisServer(Service Opt Out Handler) called
      19:32:00,030 INFO [STDOUT] SYSTEMOUT runScheduledJobOnThisServer(Service Opt Out Handler) called
      


      You can clearly see that isDebugEnabled() returns true, yet there's no logger.debug output.

      Here's the code, stripped of comments and other functions:

      import org.apache.log4j.Logger;
      
      public class ApplicationUtil
      {
       static Logger logger = Logger.getLogger(ApplicationUtil.class);
      
       private ApplicationUtil()
       {
       }
      
       public static boolean runScheduledJobOnThisServer(
       String jobName, String serverName)
       {
       logger.info("logger.isDebugEnabled() = " + logger.isDebugEnabled());
       if (logger.isDebugEnabled())
       {
       logger.info("ISDEBUGENABLED runScheduledJobOnThisServer(" + jobName + ") called");
       }
       logger.debug("TEST DEBUG runScheduledJobOnThisServer(" + jobName + ") called");
       logger.info("TEST INFO runScheduledJobOnThisServer(" + jobName + ") called");
       logger.warn("TEST WARN runScheduledJobOnThisServer(" + jobName + ") called");
       logger.error("TEST ERROR runScheduledJobOnThisServer(" + jobName + ") called");
       logger.fatal("TEST FATAL runScheduledJobOnThisServer(" + jobName + ") called");
       System.out.println("SYSTEMOUT runScheduledJobOnThisServer(" + jobName + ") called");
       return true;
       }
      
      }
      


      Using 4.0.4.GA

      Any thoughts, impressions, suggestions, hints, etc. will be greatly appreciated.

      Larry

        • 1. Re: Convenience class not printing Log4J debug statements
          starksm64

          Don't use log.info if you mean log.debug.

          • 2. Re: Convenience class not printing Log4J debug statements
            jaikiran

            Whats the value of the Threshold attribute of the IMCADMINLOG appender? Is it INFO? If yes then set the value to DEBUG. Something like:

            <appender name="IMCADMINLOG" class="blah.blah.someAppender">
             <param name="Threshold" value="DEBUG"/>
            </appender>




            • 3. Re: Convenience class not printing Log4J debug statements

              Scott - I'm only using info in the test so it prints. In this object, for some reason, I cannot get logger.debug() to print *anything*.

              My appender definition is:

               <appender name="IMCADMINLOG"
               class="org.jboss.logging.appender.DailyRollingFileAppender">
               <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler" />
               <param name="File" value="/var/log/imcAdmin.log" />
               <param name="Append" value="false" />
               <param name="Threshold" value="DEBUG" />
               <param name="DatePattern" value="'.'yyyy-MM-dd" />
               <layout class="org.apache.log4j.PatternLayout">
               <param name="ConversionPattern" value="%d %-5p [%c] %m%n" />
               </layout>
               </appender>
              



              • 4. Re: Convenience class not printing Log4J debug statements

                Problem solved. I feel silly - I had the console appender filtered to INFO when it should have been DEBUG.

                 <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"/>
                 </layout>
                 </appender>
                


                Thanks for the extra eyes.