<?xml version="1.0"?>
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">
]>
<document url="logging.html">

    &project;

  <properties>
    <title>Logging in Tomcat</title>
    <author>Allistair Crossley</author>
    <author email="yoavs@apache.org">Yoav Shapira</author>
  </properties>

<body>

  <section name="Introduction">
  <p>
    Tomcat 5.5 uses 
    <a href="http://jakarta.apache.org/commons/logging">Commons Logging</a>
    throughout its internal code allowing the 
    developer to choose a logging configuration that suits their needs, e.g
    java.util.logging or 
    <a href="http://logging.apache.org/log4j">Log4J</a>. 
    Commons Logging provides Tomcat the ability to log
    hierarchially across various log levels without needing to rely on a particular
    logging implementation.
  </p>
  <p>
    An important consequence for Tomcat 5.5 is that the &lt;Logger&gt; element found in 
    previous versions to create a <code>localhost_log</code> is no longer a valid nested element 
    of &lt;Context&gt;. Instead, the default Tomcat configuration will use java.util.logging. 
    If the developer wishes to collect detailed internal Tomcat logging (i.e what is happening 
    within the Tomcat engine), then they should configure a logging system such as java.util.logging 
    or log4j as detailed next.
  </p>

  </section>

  <section name="log4j">
    <p>
      Tomcat 5.5 has done away with <code>localhost_log</code> which you may be familiar with
      as the runtime exception/stack trace log. These types of error are usually thrown
      by uncaught exceptions, but are still valuable to the developer. They can now be
      found in the <code>stdout</code> log.
    </p>

    <p>
      If you need to setup cross-context detailed logging from within Tomcat's code, 
      then you can use a simple log4j configuration. Note that this logging van be very 
      verbose depending on the log level you chose to use.  Note also that a log4j logging 
      configuration is not going to produce stack trace type logging: those stack traces
      are output to <code>stdout</code> as discussed above.
    </p>

    <p>
      Follow the following steps to setup a file named tomcat.log that has internal 
      Tomcat logging output to it:
    </p>

    <p>
      <ol>
        <li>Create a file called log4j.properties with the following content 
            and save it into common/classes.
          <source>
            log4j.rootLogger=debug, R <br />
            log4j.appender.R=org.apache.log4j.RollingFileAppender <br />
            log4j.appender.R.File=${catalina.home}/logs/tomcat.log <br />
            log4j.appender.R.MaxFileSize=10MB <br />
            log4j.appender.R.MaxBackupIndex=10 <br />
            log4j.appender.R.layout=org.apache.log4j.PatternLayout <br />
            log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n <br />
            log4j.logger.org.apache.catalina=DEBUG, R
          </source>
	</li>

	<li><a href="http://logging.apache.org/log4j">Download Log4J</a> 
            (v1.2 or later) and place the log4j jar in $CATALINA_HOME/common/lib.</li>

        <li><a href="http://jakarta.apache.org/site/downloads/downloads_commons-logging.cgi">
            Download Commons Logging</a> and place the commons-logging.jar 
            (not commons-logging-api.jar) in $CATALINA_HOME/common/lib with 
            the log4j jar.</li>

	<li>Start Tomcat</li>
      </ol>
    </p>

    <p>
      This log4j configuration sets up a file called tomcat.log in your 
      Tomcat logs folder with a maximum file size of 10MB and
      up to 10 backups.  DEBUG level is specified which will result in the 
      most verbose output from Tomcat.
    </p>
	
    <p>
      You can (and should) be more picky about which packages to include 
      in the logging. Tomcat 5.5 uses defines loggers by Engine and Host names.
      For example, for a default Catalina localhost log, add this to the
      end of the log4j.properties above. Note that there are known issues with 
      using this naming convention (with square brackets) in log4j XML based
      configuration files, so we recommend you use a properties file as described
      until a future version of log4j allows this convention.
      
      <ul>
        <li>log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=DEBUG, R</li>
	<li>log4j.logger.org.apache.catalina.core=DEBUG, R</li>
	<li>log4j.logger.org.apache.catalina.session=DEBUG, R</li>
      </ul>

      Be warned a level of DEBUG will produce megabytes of logging and slow startup
      of Tomcat. This level should be used sparingly when debugging of internal Tomcat
      operations is required.
    </p>
	
    <p>
      Your web applications should certainly use their own log4j configuration. 
      This is valid <i>with</i> the above configuration.  You would place a similar log4j.properties 
      file in your web application's WEB-INF/classes folder, and log4j1.2.8.jar into
      WEB-INF/lib. Then specify your package level logging. This is a basic setup of log4j 
      which does *not* require Commons-Logging, 
      and you should consult the 
      <a href="http://logging.apache.org/log4j/docs/documentation.html">log4j documentation</a> 
      for more options.  This page is intended only as a bootstrapping guide.
    </p>
	
  </section>

  <section name="java.util.logging">

  <p>
    In order to configure JDK logging you should have JDK 1.4+. Tomcat 5.5 is intended for
    JDK 5.0 or later, but can be run on JDK 1.4 using a compatibility package.
  </p>
  <p>
    The default implemenatation of java.util.logging provided in the JDK is too limited to be 
    useful. A limitation of JDK Logging appears to be the inability to have per-web application logging, 
    as the configuration is per-VM. As a result, Tomcat will, in the default configuration,
    replace the default LogManager implementation with a container friendly implementation
    called JULI, which addresses these shortcomings. It supports the same configuration mechanisms 
    as the standard JDK java.util.logging, using either a programmatic approach, or properties
    files. The main difference is that per-classloader properties files can be set (which enables easy
    redeployment friendly webapp configuration), and the properties files support slightly extended
    constructs which allows more freedom for defining handlers and assigning them to loggers.
  </p>
  <p>
    JULI is enabled by default in Tomcat 5.5, and supports per classloader configuration, in addition to 
    the regular global java.util.logging configuration. This means that logging can be configured at 
    the following layers:
    <ul>
      <li>In the JDK's logging.properties file. Check
      your JAVA_HOME environment setting to see which JDK Tomcat is using (or maybe JRE 5.0 as Tomcat
      can now run on a JRE from version 5.5). The file will be in <code>$JAVA_HOME/jre/lib</code>.
      Alternately, it can also use a global configuration file located elsewhere by using the 
      system property <code>java.util.logging.config.file</code>, or programmatic configuration using
      <code>java.util.logging.config.class</code>.</li>
      <li>In each classloader using a logging.properties file. This means that it is possible to have a
      configuration for the Tomcat core, as well as separate configurations for each webapps which will 
      have the same lifecycle as the webapps.</li>
    </ul>
  </p>
  <p>
    The default logging.properties specifies a ConsoleHandler for routing logging to stdout and
    also a FileHandler. A handler's log level threshold can be set using SEVERE, CONFIG, INFO, 
    WARN, FINE, FINEST or ALL. The logging.properties shipped with JDK is set to INFO. You
    can also target specific packages to collect logging from and specify a level. Here is how
    you would set debugging from Tomcat. You would need to ensure the ConsoleHandler's level is also
    set to collect this threshold, so FINEST or ALL should be set. Please refer to Sun's java.util.logging
    documentation for the complete details.
  </p>
  <p>
    <source>org.apache.catalina.level=FINEST</source>
  </p>
  <p>
    The configuration used by JULI is extremely similar, but uses a few extensions to allow better 
    flexibility in assigning loggers. The main differences are:
    <ul>
      <li>A prefix may be added to handler names, so that multiple handlers of a single class may be 
      instantiated. A prefix is a String which starts with a digit, and ends with '.'. For example, 
      <code>22foobar.</code> is a valid prefix.</li>
      <li>As in Java 5.0, loggers can define a list of handlers using the <code>loggerName.handlers</code>
      property.</li>
      <li>By default, loggers will not delegate to their parent if they have associated handlers. This
      may be changed per logger using the <code>loggerName.useParentHandlers</code> property, which accepts 
      a boolean value.</li>
      <li>The root logger can define its set of handlers using a <code>.handlers</code> property.</li>
      <li>System property replacement for property values which start with ${sytstemPropertyName}.</li>
    </ul>
  </p>
  <p>
    Example logging.properties file to be placed in common/classes:
    <source>
handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, \
           3manager.org.apache.juli.FileHandler, 4admin.org.apache.juli.FileHandler, \
           java.util.logging.ConsoleHandler

.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.

2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.

3manager.org.apache.juli.FileHandler.level = FINE
3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.FileHandler.prefix = manager.

4admin.org.apache.juli.FileHandler.level = FINE
4admin.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
4admin.org.apache.juli.FileHandler.prefix = admin.

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter


############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = \
   2localhost.org.apache.juli.FileHandler

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = \
   3manager.org.apache.juli.FileHandler

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/admin].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/admin].handlers = \
   4admin.org.apache.juli.FileHandler

# For example, set the com.xyz.foo logger to only log SEVERE
# messages:
#org.apache.catalina.startup.ContextConfig.level = FINE
#org.apache.catalina.startup.HostConfig.level = FINE
#org.apache.catalina.session.ManagerBase.level = FINE
    </source>
    </p>
    
    <p>
      Example logging.properties for the servlet-examples web application to be placed
      in WEB-INF/classes inside the web application:
      <source>
handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

org.apache.juli.FileHandler.level = FINE
org.apache.juli.FileHandler.directory = ${catalina.base}/logs
org.apache.juli.FileHandler.prefix = servlet-examples.

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
      </source>
    </p>

  </section>

  <section name="Handler Properties">
    <p>
      Tomcat's JULI implementation is not intended to be a fully-featured logging libary, only
      a simple bridge to those libraries.  However, JULI does provide several properties
      for configuring the its handlers.  These are listed below.
    </p>
    
    <subsection name="FileHandler">
      <attributes>
        <attribute name="directory" required="false">
          <p>
            The directory where the log file will be written.  The Tomcat server account
            should have write permissions to this directory.  The default value of this
            property is <em>logs</em>.
          </p>
        </attribute>

        <attribute name="prefix" required="false">
          <p>
            The log file name prefix.  This is the portion of the log file name before the date.  
            The default value of this property is <em>juli.</em>.
          </p>
        </attribute>

        <attribute name="suffix" required="false">
          <p>
            The log file name suffix.  This is the portion of the log file name after the date.
            The default value of this property is <em>.log</em>.
          </p>
        </attribute>

        <attribute name="level" required="false">
          <p>
            The threshold level for this handler.  It must be one of the levels in the 
            <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html">java.util.logging.Level</a> class.
            The default value of this property is <em>ALL</em>.  Messages whose level is below
            the specified level will not be written to the file.
          </p>
        </attribute>

        <attribute name="filter" required="false">
          <p>
            The fully-qualified class name of a class that implements the 
            <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Filter.html">java.util.logging.Filter</a> 
            interface.  JULI will load this class and associate it with this handler to filter its messages.
            By default, there is no Filter associated with the handler.            
          </p>
        </attribute>

        <attribute name="formatter" required="false">
          <p>
            The fully-qualified class name of a class that implements the
            <a href="http://java.suncom/j2se/1.4.2/docs/api/java/util/logging/Formatter.html">java.util.logging.Formatter</a>
            interface.  JULI will load this class and associate it with this handler to format its messages.
            By default, there is no Formatter associated with the handler.
          </p>
        </attribute>

      </attributes>

    </subsection>    
  
  </section>

</body>
</document>
