星期天,由于日志文件过大,服务商发短信通知机器的硬盘占用已经超过90%了,需要把日志压缩一下。
刚开始考虑使用logback自带的压缩,先进行调研,能否解决我们的问题,会不会引发其他问题?然后发现了这篇文章:logback日志压缩的问题, 可能需要改源码,代价太大,还是自己解决吧。
思考了一下,决定使用crontab 在凌晨跑下脚本压缩一下三天前的日志文件,写了以下脚本 autoZip.sh:
function autoZipFun(){
#以三天为时间节点,压缩三天前的日志
threeDaysAgo=`date -d '-2 day' +%Y%m%d00`
#文件夹路径
local root=$1
#遍历文件夹
for i in $root/*
do
if [[ -d $i ]]
then
echo "$i 为 文件夹"
#如果是文件夹,进入文件夹,递归调用autoZipFun
autoZipFun $i
elif [[ $i == *[[:digit:]]* && $i != *gz ]]
then
#如果文件夹中包含数字,且不以gz结尾,那么认为这个文件是未压缩的日志文件
#获取文件名中的日期
local currDate=`echo $(basename $i) | tr -cd "[0-9]"`
#如果是三天前的日期,使用gzip压缩
if [[ $currDate -lt $threeDaysAgo ]]
then
gzip $i
echo "$i 已压缩完成"
else
echo "$i 为三天内的日志不需要压缩"
fi
else
echo "$i 为已完成压缩历史文件"
fi
done
}
# 进入日志压缩函数,$1为传入的日志文件路径,如/data/logs/***-service/
autoZipFun $1