How to Prevent Tomcat 7 from Duplicate Logging to catalina.out and catalina.YYYY-MM-DD.log


1 views

When examining Tomcat 7's default logging configuration (specifically version 7.0.29 on OpenBSD 5.2), we observe that all system messages get duplicated across two files:

1. catalina.out (continuous append-only log)
2. catalina.YYYY-MM-DD.log (daily rotated log)

This occurs because Tomcat's default configuration utilizes both:

  1. ConsoleAppender (writes to catalina.out)
  2. FileAppender with DailyRollingPolicy (creates dated log files)

The key configuration files controlling this behavior are:

1. ${catalina.base}/conf/logging.properties
2. bin/catalina.sh startup script

To eliminate duplicate logging, edit logging.properties:

# Original configuration causing duplication
1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.

# Modified configuration to stop console output
1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
handlers = 1catalina.org.apache.juli.FileHandler

For environments where you need to keep console logging but want to prevent file duplication:

# In catalina.sh
if [ -z "$CATALINA_OUT" ] ; then
    CATALINA_OUT="/dev/null"
fi

After making changes:

  1. Restart Tomcat: ${catalina.base}/bin/shutdown.sh && ${catalina.base}/bin/startup.sh
  2. Check log files: ls -lh ${catalina.base}/logs/catalina*
  3. Verify output: tail -f ${catalina.base}/logs/catalina.out should show no new entries
  • Some monitoring systems may expect logs in catalina.out
  • Ensure proper file permissions are maintained: chown _tomcat:_tomcat ${catalina.base}/logs/*
  • Log rotation should now only occur for the dated log files

Tomcat 7's default configuration uses two parallel logging mechanisms that often frustrate system administrators:

1. ConsoleHandler - writes to catalina.out
2. FileHandler - creates daily catalina.YYYY-MM-DD.log files

The duplication occurs because Tomcat's logging.properties typically contains:

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

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

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

Edit ${catalina.base}/conf/logging.properties:

# Comment out or remove the ConsoleHandler
handlers = 1catalina.org.apache.juli.FileHandler, \
           2localhost.org.apache.juli.FileHandler

# Ensure proper permissions
1catalina.org.apache.juli.FileHandler.directory = /var/tomcat/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
1catalina.org.apache.juli.FileHandler.rotatable = true

For more control, configure log4j.properties:

log4j.rootLogger=INFO, R
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=/var/tomcat/logs/catalina.log
log4j.appender.R.DatePattern='.'yyyy-MM-dd
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

After making changes:

  1. Restart Tomcat: service tomcat restart
  2. Check active handlers: ps aux | grep tomcat | grep logging
  3. Verify log files aren't growing unexpectedly
  • Set up log rotation for catalina.out as a safety measure
  • Monitor disk space during the transition period
  • Consider implementing log aggregation for better management