Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tomcat catalina.out is 40GB

Tags:

java

tomcat

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

like image 331
Chhunly Lim Avatar asked Dec 19 '22 04:12

Chhunly Lim


2 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.

like image 145
Guillem Avatar answered Jan 05 '23 01:01

Guillem


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
like image 42
Mansur Ul Hasan Avatar answered Jan 05 '23 02:01

Mansur Ul Hasan