对于日志, logback支持滚动压缩文件和保留一定时间的历史文件, 但是不能保证留存最近七天的
.log
文件, 并对最近30天的log文件进行压缩处理, 所以这里就通过shell命令和crontab来实现日志文件的定期压缩清除
autoZip.sh
首先我们的日志文件命名规则是 *.%d{yyyy-MM-dd}.log
, 通过docker挂载到本地目录集中保存, 规律是 /data/logs/*/*.log
其中logs下为每个服务的目录
#!/bin/bash
function tarOrClear() {
point=`date -d '-7 day' +%s`
point2=`date -d '-30 day' +%s`
root=$1
dirs=`ls -F | grep /$`
for i in $dirs; do
echo "========= cd $root/$i"
cd $root/$i
files=`ls`
for fileName in $files; do
prefix=${fileName%%.*}
day=$( expr "$fileName" : '.*\([0-9]\{4\}\-[0-9]\{2\}-[0-9]\{2\}\).*' )
if [[ $day != "" ]];then
dayTime=`date -d $day +%s`
# 30天以外的日志直接删除
if [[ $dayTime -lt $point2 ]];then
echo "rm $fileName"
rm $fileName
# 7天以外的日志压缩tar.gz, 删除原log文件
elif [[ $dayTime -lt $point ]];then
if [[ $fileName == *.log ]] && [[ ! -a $prefix.$day.tar.gz ]];then
echo "tar -czf $prefix.$day.tar.gz $fileName --remove-files"
tar -czf $prefix.$day.tar.gz $fileName --remove-files
fi
fi
fi
done
done
}
if [[ $# == 1 ]];then
tarOrClear $1
else
echo "请选定日志文件根目录, 日志文件位于 根目录/*/*.log"
fi
crontab定时任务
crontab -e
进入定时任务编辑
增加一行
0 1 * * * (sh /data/logs/autoZip.sh /data/logs) > /data/logs/console.log
保存退出
crontab -l
查看定时任务列表是否更新
这样在每天01:00, 服务器会自动执行 autoZip.sh
对 /data/logs/*/*.log
的日志文件进行压缩和清理