一,为什么使用rotatelogs做日志切分?
1,什么是roatelogs?
rotatelogs是apache提供的日志滚动切分的工具
官方文档:
https://httpd.apache.org/docs/2.4/programs/rotatelogs.html
2,日志切分的方法:
可以复制文件内容后然后把当前日志文件置空
可以使用linux自带的logrotate服务
可以使用通过管道进行日志处理的工具进行日志切分( cronolog,rotatelogs)
cronolog已经多年没有维护过了,
我们使用apache官方出品的rotatelogs来进行日志的切分
说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest
对应的源码可以访问这里获取: https://github.com/liuhongdi/
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,安装rotatelogs
1,用dnf安装即可:
[root@blog tools]# dnf install httpd
说明:rotatelogs命令被包含在httpd这个包当中
2,查看已安装的效果:
[root@blog ~]# whereis rotatelogs rotatelogs: /usr/sbin/rotatelogs /usr/share/man/man8/rotatelogs.8.gz
3,查看rotatelogs命令的版本:
因为没有提供查看版本的选项,只可以查看它所属的httpd包的版本:
[root@blog ~]# /usr/sbin/httpd -v Server version: Apache/2.4.37 (centos) Server built: Sep 15 2020 15:41:16
4,查看rotatelogs命令的手册:
[root@blog ~]# man rotatelogs
查看rotatelogs命令的帮助:
[root@blog ~]# rotatelogs --help
三,rotelogs的使用举例:
1,每1分钟生成一个日志文件:
# | /usr/sbin/rotatelogs 指定 rotatelogs程序文件的路径,注意和nohup命令中间用了管道符连接
# /data/nohup.%Y-%m-%d-%H_%M_%S.log : 这个是我们指定的日志文件,文件名中包含了年月日时分秒
#60 :切换日志文件的时间间隔,单位是秒,我们这里指定为1分钟
#480 :相对于UTC的时差的分钟数。如果省略,则假定为0,并使用UTC时间。我们位于UTC时差为8小时的地区的当地时间,则此参数应为480分钟
[root@blog tools]# nohup /usr/local/soft/jdk-15/bin/java -jar /data/java/jar/web-0.0.1-SNAPSHOT.jar --spring.profiles.active=prd 2>&1 | /usr/sbin/rotatelogs /data/nohup.%Y-%m-%d-%H_%M_%S.log 60 480 &
查看生成的日志文件:
[root@blog ~]# ll /data/nohup.2020-10-26-* -rw-r--r-- 1 root root 15644 Oct 26 16:08 /data/nohup.2020-10-26-08_08_00 -rw-r--r-- 1 root root 443 Oct 26 16:09 /data/nohup.2020-10-26-08_09_00 -rw-r--r-- 1 root root 5514 Oct 26 16:09 /data/nohup.2020-10-26-16_09_00 -rw-r--r-- 1 root root 7467 Oct 26 16:10 /data/nohup.2020-10-26-16_10_00
2,每50M生成一个日志文件:
#50M:文件发生滚动分割时的大小
[root@blog tools]# nohup /usr/local/soft/jdk-15/bin/java -jar /data/java/jar/web-0.0.1-SNAPSHOT.jar --spring.profiles.active=prd 2>&1 | /usr/sbin/rotatelogs /data/nohup.%Y-%m-%d-%H_%M_%S 50M 480 &
3,手册中提供的命令语法:
rotatelogs [ -l ] [ -L linkname ] [ -p program ] [ -f ] [ -D ] [ -t ] [ -v ] [ -e ] [ -c ] [ -n number-of-files ] logfile rotationtime|filesize(B|K|M|G) [ offset ]
四,一个nohup日志切分的例子:
每天生成一个日志文件,这是较常用的做法:
1,bash脚本:
[root@blog ~]# more /data/java/tools/startadmin.sh #!/bin/bash export BUILD_ID=dontKillme WORKSPACE=/data/java/jar JDK_PATH=/usr/local/soft/jdk-15/bin/java JAR_NAME=web-0.0.1-SNAPSHOT.jar PID=`ps -ef | grep ${JAR_NAME} | grep -v grep | grep -v startup | awk '{print $2}'` echo $PID; if [ ! "$PID" ] ;then echo "进程不存在" else echo "进程存在,杀死进程PID$PID" kill -9 $PID fi echo "服务启动开始" nohup ${JDK_PATH} -jar ${WORKSPACE}/${JAR_NAME} --spring.profiles.active=prd 2>&1 | /usr/sbin/rotatelogs /data/merchant/logs/run_%Y%m%d.log 86400 480 &
2,查看生成的日志:
[root@blog ~]# ll /data/merchant/logs/run_* -rw-r--r-- 1 root root 5514 Oct 26 16:55 /data/merchant/logs/run_20201026.log
五,查看centos的版本:
[root@blog liuhongdi]# cat /etc/redhat-release CentOS Linux release 8.2.2004 (Core)