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:
- ConsoleAppender (writes to catalina.out)
- 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:
- Restart Tomcat:
${catalina.base}/bin/shutdown.sh && ${catalina.base}/bin/startup.sh
- Check log files:
ls -lh ${catalina.base}/logs/catalina*
- 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:
- Restart Tomcat:
service tomcat restart
- Check active handlers:
ps aux | grep tomcat | grep logging
- 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