log4j: different category priority than appender threshold

10,263

I soon found the solution. Basically the use case is described in the jboss wiki here: http://docs.jboss.org/process-guide/en/html/logging.html Section 10.3.5 Redirecting Category Output. This blog article was helpful as well: ptth://ourcraft.wordpress.com/2008/10/23/customizing-log4j-logging-on-jboss/#comment-796.

Ultimately here is what I used that worked:

   <appender name="SQL_FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="File" value="${jboss.server.log.dir}/sql.log"/>
      <param name="Append" value="false"/>

      <param name="DatePattern" value="'.'yyyy-MM-dd"/>

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

   </appender>

<category name="java.sql.Connection"  additivity="false">
    <priority value="DEBUG"/>
    <appender-ref ref="SQL_FILE"/>
</category>  

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

Note that you do not want to define the SQL_FILE appender in root; for some reason. That was the final piece.

Share:
10,263
james.lorenzen
Author by

james.lorenzen

Updated on June 27, 2022

Comments

  • james.lorenzen
    james.lorenzen almost 2 years

    I've been trying to get this simple use case to work but can't: Define a default Threshold of INFO on a FILE Appender, but define a category with DEBUG level. This is a jboss 4.2.1.GA log4j.xml file that I am using where I just want to log java.sql calls.

       <appender name="SQL_FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
          <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
          <param name="File" value="${jboss.server.log.dir}/sql.log"/>
          <param name="Append" value="false"/>
          <param name="Threshold" value="INFO"/>
    
          <param name="DatePattern" value="'.'yyyy-MM-dd"/>
    
          <layout class="org.apache.log4j.PatternLayout">
             <param name="ConversionPattern" value="%d %-5p [%c] %C %m%n"/>
          </layout>
       </appender>
    
      <category name="java.sql">
        <priority value="DEBUG"/>
        <appender-ref ref="SQL_FILE"/>
      </category>
    
       <root>
          <appender-ref ref="SQL_FILE"/>
       </root>
    

    Instead of logging just java.sql it logs INFO and above and does not include any java.sql information. If there is no easy solution then I am left with setting the appender Threshold to DEBUG and turning off all logging for the multiple categories that get included, which seems a waste of time.

    I tried the following but couldn't get it to work: Configuring multiple log files in log4j while using categories.