对于日志, 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
的日志文件进行压缩和清理