Skip to main content

How to rotate log files

Sometimes, log files can get fairly big. To avoid this, they can be "rotated" frequently. For that, logrotate is the best tool we know.

As an example, this article covers the configuration of logrotate for the log files of a Tomcat 8 instance, which are located in /home/www-data/example.ch/logs/catalina.out.

Configure Logrotate

You will need to add a configuration file (for instance, as a hidden file in the home folder): ~/.logrotate.conf.

A simple configuration could look like this:

/home/www-data/example.ch/logs/catalina.out {
daily
rotate 14
notifempty
compress
copytruncate
}

With this configuration, logrotate:

  • rotates the file ~/example.ch/logs/catalina.out once per day
  • keeps 14 log files
  • does not rotate if the file is empty
  • compresses the log files

The copytruncate option does copy the log file and empties the log file afterwards.

This will end up in daily log files like this:

  • .../catalina.out-20161212.gz
  • .../catalina.out-20161213.gz
  • .../catalina.out-20161214.gz

More options to configure logrotate can be found here.

Execute Logrotate Daily

Logrotate can be executed like this:

/usr/sbin/logrotate -s ~/.logrotate.status.tmp ~/.logrotate.conf

We have to provide a custom state file with the -s option, since the global state file is only writeable by the root user.

To execute this command daily, we can add it to cron by executing crontab -e. Simply add following line to the end of the file:

0 0 * * * /usr/sbin/logrotate -s ~/.logrotate.status.tmp ~/.logrotate.conf >/dev/null 2>&1

Now, the logrotate is executed once a day at midnight. Be aware that with >/dev/null 2>&1 at the and of the command all output of the command is suppressed.

More information about the configuration of cron can be found here.