使用shell脚本清除日志的策略

1 在log4j和logback中都可以配置

  • 按照日期每天滚动一个日志,不需要设置日志的大小,弊端就是可能日志文件特别大,造成加载日志文件较为困难
  • 按照日期每天滚动一个日志,同时设置每个文件大小的上限(比如:2g),这样就会避免加载较大的日志文件
  • 按照日期每天滚动一个日志,设置每个日志文件大小的上限,在设置一天中按照日志大小最多滚动多少个日志文件,比如:按照设置日志文件最大2g,每天最大保存20个日志文件,那么一天中的日志存储量最大为:2g * 20个 = 40g,弊端就是当一天中的日志总量大于40g,则多余的日志就会被清除掉
  • 按照日期每天滚动一个日志,设置每个日志文件大小的上限,然后设置最多保存30天的日志量,也可以自动清除日志,在logback中可以实现,但我使用的是log4j没有实现成功

2 日志文件和shell脚本配合使用

  • 在日志配置(log4j或者logback)文件中设置按照日期每天滚动一个日志,设置每个日志文件大小的上线;在对应服务器上的定时任务执行shell脚本,脚本逻辑为当日志文件达到服务器磁盘的70%(可设置)或者日志文件个数达到150(可设置)个时,清除最早的日志文件
    shell脚本
#!/usr/bin/env bash
 
file_path="/xxx/xxx" #日志路径

file_size=$(du -m ${file_path} | awk '{print $1}') #日志路径下的文件大小
default_size=$[35 * 1024] #默认一个ip日志文件的总量为35g
over_size=$[${file_size}/${default_size}] #现有的文件总量是35g的倍数
flag_size=$[$[over_size] == 1 || $[over_size] > 1] #如果等于1,则达到35g,flag为true,则为1

file_count=$(ls -l ${file_path} | grep "F*" | wc -l) #日志路径下的文件个数
default_count=150 #默认一个container的所有的流的日志文件个数为150
over_count=$[${file_count}/${default_count}] #现有的文件个数是默认文件个数的倍数
flag_count=$[${over_count} >= 1 ] #判断文件个数是否为150个,超过将最早的日志文件删除

if [ ${flag_size} == 1 ]; then # 判断日志总量超过默认值
    # 清除时间最早的日志
    file_name=$(ls -rt ${file_path}| head -1)
    echo ${file_name}
    if [ -n "$file_name" ]; then
        echo ${file_path}${file_name}
        rm -rf ${file_path}${file_name}
        echo "清除的日志为:"${file_name}
    else
        echo "不存在文件"
    fi
elif [ ${flag_count} == 1 ]; then # 判断日志文件个数超过默认值
    if [ ${file_count} != ${default_count} ]; then
        del_num=$[${file_count} - ${default_count}]
        file_names=$(ls -rt ${file_path} | head -${del_num})
        echo "清除的日志为:"${file_names}
        cd ${file_path}
        rm -rf $(ls -rt ${file_path} | head -${del_num})
    fi
else
    echo "日志大小为: "$[${file_size}/1024]"M"
fi
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值