日志文件定期压缩清除

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

    原文作者:加林
    原文地址: https://segmentfault.com/a/1190000020483281
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞