Will rotate all .log files in basedir/ as well as all .log files in any direct child of basedir. If you also need to go 1 level deeper just add another /var/log/basedir/*/*/*.log until you have each level covered.
This can be tested by using a separate logrotate config file which contains a constraint that will not be met (a high minsize) and then running log rotate yourself in verbose mode
logrotate -d testconfig.conf
the -d flag will list each log file it is considering to rotate.
In my case, the depth of subdirectories can change without warning, so I set up a bash script to find all subdirectories and create a config entry for each directory.
It's also important for me to keep the structure of subdirectories after rotation, which wildcards (i.e. @DanR's answer) didn't seem to do. If you're doing daily log rotations, you could put this script in a daily cron-job.
basedir=/var/log/basedir/
#destdir=${basedir} # if you want rotated files in the same directories
destdir=/var/log/archivedir/ #if you want rotated files somewhere else
config_file=/wherever/you/keep/it
> ${config_file} #clear existing config_file contents
subfolders = $(find ${basedir} -type d)
for ii in ${subfolders}
do
jj=${ii:${#basedir}} #strip off basedir, jj is the relative path
#append new entry to config_file
echo "${basedir}${jj}/* {
olddir ${destdir}${jj}/
daily
rotate 5
}" >> ${config_file}
#add one line as spacing between entries
echo "\n" >> ${config_file}
#create destination folder, if it doesn't exist
[ -d ${destdir}${jj} ] || mkdir ${destdir}${jj}
done
These two stars will match zero or more directories. You must be careful, though, how you define log files to be rotated, because you can rotate files that have been already rotated. I'll cite the manual of logrotate here.
Please use wildcards with caution. If you specify *, logrotate 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).
How deep do your subdirectories go?
Will rotate all .log files in basedir/ as well as all .log files in any direct child of basedir. If you also need to go 1 level deeper just add another
/var/log/basedir/*/*/*.log
until you have each level covered.This can be tested by using a separate logrotate config file which contains a constraint that will not be met (a high minsize) and then running log rotate yourself in verbose mode
the -d flag will list each log file it is considering to rotate.
In my case, the depth of subdirectories can change without warning, so I set up a bash script to find all subdirectories and create a config entry for each directory.
It's also important for me to keep the structure of subdirectories after rotation, which wildcards (i.e. @DanR's answer) didn't seem to do. If you're doing daily log rotations, you could put this script in a daily cron-job.
Like @DanR suggested, test with
logrotate -d
It's old thread, but you can do the following:
These two stars will match zero or more directories. You must be careful, though, how you define log files to be rotated, because you can rotate files that have been already rotated. I'll cite the manual of logrotate here.