Tomcat catalina.out is 40GB

Viewed 16699

I wonder why my spring project with tomcat server got catalina.out file with size 40GB. Any solutions, please.catalina.out reach 40 GB

3 Answers

catalina.out reaches such a large size because:

1- there might be many logging messages sent to console handler, and

2- also there is not any rotation of catalina.out (and no policy to remove older catalina.out).

First, as there might be some duplication and the messages in catalina.out , which could also be stored in *log messages too, I'd check if the contents of the log files (catalina.[DATE].log) are the same as those of catalina.out, if so then you can edit file conf/logging.properties and remove console handler

I'd also check the level of the log messages and set a higher level if possible. Look for this line in conf/logging.properties

java.util.logging.ConsoleHandler.level = ....

Possible levels, in increasing level of frequency are SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST or ALL. I'd try replace ALL, FINEST, FINER, FINE by CONFIG or even INFO. For instance, by setting it to INFO, all SEVERE, WARNING and INFO messages will be logged but not any with a level to the right of that list.

Also another option is set a limit to console handler by adding this line to conf/logging.properties

java.util.logging.ConsoleHandler.limit = 1024000

and rotate catalina.out configuring an automatic task to remove older ones.

if you are linux user to handle this from system is pretty easy you can configure logrotation with logrotate this is very easy

Step : 1 (Create Logrotate file)

root@c2dapp01-usea1e# vim /etc/logrotate.d/tomcat

Step : Add rotation instruction for linux log rotator

/opt/tomcat/latest/logs/catalina.out {
    copytruncate
    daily
    rotate 7
    compress
    missingok
    size 100M
}

Step : 3 Add cron job to run daily in crond.daily or create custom cron (This file is by default there if not then only create)

root@c2dapp01-usea1e:# vim /etc/cron.daily/logrotate
# Clean non existent log file entries from status file
cd /var/lib/logrotate
test -e status || touch status
head -1 status > status.clean
sed 's/"//g' status | while read logfile date
do
    [ -e "$logfile" ] && echo "\"$logfile\" $date"
done >> status.clean
mv status.clean status

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

This script can be run manually.

/usr/sbin/logrotate /etc/logrotate.conf

Most probably the huge size of logs is due to the DEBUG mode setting of log4j. Change this setting to WARN and the size of logging will be reduced.

This is quite common to see catalina.out file expanding.

this could be used to clear the log of catalina.out file without stopping tomcat with the command below.

sudo cat /dev/null > /opt/tomcat/apache-tomcat-9.0.37/logs/catalina.out  

To keep catalina.out smaller in size, either one of the following ways can be used:

  1. You could use the above Linux command and add it to a CronScheduler to run daily/ weekly/ monthly or yearly as preferred.

  2. Use logrotate tool in Linux. It is a log managing command-line tool in Linux. This can rotate the log files under different conditions. Particularly, we can rotate log files on a fixed duration or if the file has grown to a certain size. You can click here for more info on this.

Related