Linux环境对java日志按照日期进行切割(其他文件也可以)

 在Linux环境上,有些java项目日志量太多,导致不方便查询日志。有些将日志堆在一个文件里,导致日志量太多,不方便查看历史日志。

这个时候可以在java代码里进行日志分割。

此文章是另一种日志分割,在Linux系统上对已生成的日志按照日期和文件大小进行切割,最终的结果就是一个天一个文件夹,每个文件夹里有那一天对应的历史日志。日志切割之后 ,会将原来的文件给清空。.

切割日志脚本:

创建一个shell脚本,例如:splitLog.sh

#!/bin/bash  
# Author: haodage
# log.out 日志分割
this_path=/logs #日志所在路径
current_date=`date -d "-1 day" "+%Y%m%d"`  #时间
cd $this_path
echo $this_path
echo $current_date

do_split(){
    [ ! -d log/${current_date} ] && mkdir -p log/${current_date} 
    split -b 200M -d -a 4 ./log.out ./log/${current_date}/  #切分日志,200M每块,到log文件中,格式为:20210615/0001
    if [ $? -eq 0 ];then
        echo "Split is finished!"
    else
        echo "Split is Failed!"
        exit 1
    fi
}

do_del_log(){
    cat /dev/null > log.out #清空日志文件
    # > log.out
}

if do_split ;then
    do_del_log
    echo "shch is split Success"
else
    echo "shch is split Failure"
    exit 2
fi

代码解释:

  1. #!/bin/bash    解释此脚本的shell的路径(必须要有)
  2. current_date=`date -d "-1 day" "+%Y%m%d"`  #当前时间,-1 day  是当前时间-1天,0当前时间,1当前时间+1天,例如:当前2021-06-17,结果就是20210616
  3. [ ! -d log/${current_date} ] && mkdir -p log/${current_date}    #判断在this_path下面是否有log//${current_date}文件夹,没有的话会进行创建,mkdir  -p 如果上级文件夹不存在,也会创建
  4. split -b 200M -d -a 4 ./log.out ./log/${current_date}/  #切分日志,200M每块,到log文件中,格式为:20210615/0001,4表示文件名是从0000开始累加的
  5. cat /dev/null > log.out #清空日志文件

 

如果切割的文件是在实时写进去的话,这个时候如果清空文件,会产生“文件空洞”(文件大小暂时是0,当有写入的话,打下会立马回到清空之前的大小,但是之前的都是空。这就是文件空洞)。解决方法:对于java项目来说,在指定写入日志的配置地方,需要用两个 ">" ,这样的话清空文件时,写入位置置零,追加写入会从起始位置开始写入,不会产生文件空洞

例如

nohup java -jar /app/web.jar --spring.config.location=/app/application-ali.yml > /app/log.out 2>&1 &
改成
nohup java -jar /app/web.jar --spring.config.location=/app/application-ali.yml >> /app/log.out 2>&1 &

效果:

切割其他文件也可以的

 

和Linux定时任务组合一起就可以,让系统自己定时切割啦,比如:我想让他每天23:55进行日志切割。Linux定时任务可以参考我另一个文章,https://blog.csdn.net/weixin_41709447/article/details/117982516

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要按大小切割日志文件,可以使用 logrotate 工具来实现。logrotate 工具可以定期对指定的日志文件进行轮转,以便于管理和备份。 以下是按大小切割日志文件的步骤: 1. 安装 logrotate 工具,可以使用以下命令进行安装: ``` sudo apt-get install logrotate ``` 2. 创建一个 logrotate 配置文件,可以在 /etc/logrotate.d 目录下创建一个新的文件,例如 /etc/logrotate.d/myapp。在该文件中,可以配置需要轮转的日志文件、轮转周期、保存的备份数量等参数。例如: ``` /var/log/myapp.log { size 10M rotate 5 compress dateext create 0644 root root } ``` 上面的配置表示,对 /var/log/myapp.log 文件进行轮转,当文件大小达到 10M 时进行轮转,最多保存 5 个备份文件,使用 gzip 进行压缩,备份文件名添加日期后缀,新建备份文件的权限为 0644,属主为 root。 3. 手动执行 logrotate 来进行日志轮转,可以使用以下命令来进行手动轮转: ``` logrotate -f /etc/logrotate.d/myapp ``` 上面的命令表示,强制执行 /etc/logrotate.d/myapp 配置文件中定义的轮转操作。 4. 配置 logrotate 定时任务,定期执行轮转操作。可以编辑 /etc/crontab 文件,添加以下行: ``` 0 0 * * * root logrotate -f /etc/logrotate.d/myapp ``` 上面的配置表示,每天午夜 0 点执行 logrotate 命令来进行日志轮转。 注意:在配置 logrotate 时,需要根据实际情况进行配置,以免误删重要的日志信息。另外,需要按照一定的规则来命名备份文件,以便于管理和查找。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值