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