Logrotate is a useful application for automatically rotating your log files. If you choose to store certain logs in directories that logrotate doesn’t know about, you need to create a definition for this.
In the example listed near the bottom of the post, we are showing how we can rotate our logs that are stored in /home/sites/logs. These logs are for Apache access and error logs. But also has a third log file that ends in .logs.
If you ran through this quickly, one might simply create a definition as a wildcard, such as:
/home/sites/logs/*
Unfortunately, logrotate will read this literally and now will rotate compressed log files that were already in rotation, leaving you with a mess in your log directories like this:
/home/sites/logs/http-access.log.1.gz /home/sites/logs/http-access.log.1.gz.1 /home/sites/logs/http-access.log.1.gz.1.1 /home/sites/logs/http-access.log.1.gz.1.1.1 /home/sites/logs/http-access.log.1.gz.1.1.1.1
And it just goes down hill from there. This exact thing happened to me cause I forgot to read the man page which clearly stated:
Please use wildcards with caution. If you specify *, log rotate will rotate all files, including previously rotated ones. A way around this is to use the olddir directive or a more exact wildcard (such as *.log).
So using wildcards are still acceptable, but use them with caution. As I had three types of files to rotate in this example, I found that I can string them together as follows:
/home/sites/logs/*.error /home/sites/logs/*.access /home/sites/logs/*.log
I’ll post the example configuration below that was implemented on a FreeBSD solution for logging this custom directory:
cat /usr/local/etc/logrotate.conf # see "man log rotate" for details # rotate log files weekly daily # keep 4 weeks worth of backlogs rotate 30 # create new (empty) log files after rotating old ones create # uncomment this if you want your log files compressed compress # RPM packages drop log rotation information into this directory # include /usr/local/etc/logrotate.d # system-specific logs may be configured here /home/sites/logs/*.error /home/sites/logs/*.access /home/sites/logs/*.log { daily rotate 30 sharedscripts postrotate /usr/local/etc/rc.d/apache22 reload > /dev/null 2>/dev/null endscript }
Now lets test this out to confirm the logs will rotate properly by running:
logrotate -f /usr/local/etc/logrotate.conf logrotate -f /usr/local/etc/logrotate.conf logrotate -f /usr/local/etc/logrotate.conf
When you check your logs directory, you should now see the files rotating out properly:
/home/sites/logs/http-access.log /home/sites/logs/http-access.log.1.gz /home/sites/logs/http-access.log.2.gz /home/sites/logs/http-access.log.3.gz