tomcat 日志切割

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tomcat 日志切割相关的知识,希望对你有一定的参考价值。

修改前的 tomcat 都是将所有数据保存在一个日志文件 catalina.out 中,平时实验环境下没有什么问题,但是在生产环境中,由于数据量巨大,会导致日志查看困难,因此将日志通过某些方法进行自动分割,而修改后的 tomcat 将会按“日”保存日志文件,文件格式例如:catalina.2022-6-10.out


1、方法一:使用 cronolog

官网:​​http://cronolog.org​

RPM包下载方法:在rpmfind.net上搜索cronolog选择对应RPM包复制下载链接即可

下戟安装cronolog:

​​[root@localhost ~]​​​​# yum install https://rpmfind.net/linux/epel/7/x86_64/Packages/c/cronolog-1.6.2-14.el7.x86_64.rpm -y​​

查看 cronolog 安装后所在目录(验证安装是否成功):

​​[root@localhost logs]​​​​# whereis cronolog​​
​​cronolog: ​​​​/usr/sbin/cronolog​​​ ​​/usr/share/man/man1/cronolog​​​​.1m.gz​​

编辑 bin/catalina.sh 文件(tomcat的启动文件):

​​1.找到下面行并把它用#注释掉​​
​​touch "$CATALINA_BASE"/logs/catalina.out​​
​​在新 Tomcat7 的 bin/catalina.sh 文件要注释的行是​​
​​touch "SCATALINA_OUT"​​

​​2.替换下面的行(有两处,不过一般在-security 中的那一行不需要去关注,不妨两处全替换了):​​
​​org.apache.catalina.startup.Bootstrop "$@" start \\​​
​​>> "$CATALINA_BASE"/logs/catalina.out 2>&1 &​​
​​修改为​​
​​org.apache.catalina.startup.Bootstrap "$@" start \\​​
​​2>&1 | /usr/local/sbin/cronolog "$CATALINA_BASE" /logs/catalina-%Y-%m-%d.out>>/dex/null &​​

​​在新 Tomcat7 的 bin/catalina.sh 中需要替换的行是​​
​​>> "$CATALINA_OUT" 2>&1 "&"​​
​​替换后该行的内容与上面是一样的​​

​​注:为什么 Tomcat7 后会有所不同,因为在它的 catalina.sh 文件中有如下定义​​
​​CATALINA_OUT="$CATALINA_BASE" /logs/catalina.out​​

​​3.保存 catalina.sh 文件并重启 Tomcat 即可​​
​​[root@localhost ~]# systemctl restart tomcat.service​​

查看日志分割结果:

​​[root@localhost ~]​​​​# ll -d /usr/local/tomcat/logs/catalina-2022-06-10.out​​
​​-rw-r--r-- 1 tomcat tomcat 106331 Jun 10 16:51 ​​​​/usr/local/tomcat/logs/catalina-2022-06-10​​​​.out​​
​​#可以看到已经存在​​


2、方法二:使用 rotatelogs

`rotatelogg` 是 `apache` 自带的工具

查看rotatelogs属于哪个包(确认是否包含在apache里面):

​​#通过观察,确认rotatelegs包含在apache包内,因此仅需要安装httpd即可顺带安装rotatelegs​​

​​[root@localhost logs]# yum whatprovides */rotatelogs​​
​​Loaded plugins: fastestmirror​​
​​Loading mirror speeds from cached hostfile​​
​​* base: mirrors.dgut.edu.cn​​
​​* extras: mirrors.dgut.edu.cn​​
​​* updates: mirrors.dgut.edu.cn​​
​​httpd-2.4.6-95.el7.centos.x86_64 : Apache HTTP Server​​
​​Repo : base​​
​​Matched from:​​
​​Filename : /usr/sbin/rotatelogs​​

​​httpd-2.4.6-97.el7.centos.x86_64 : Apache HTTP Server​​
​​Repo : updates​​
​​Matched from:​​
​​Filename : /usr/sbin/rotatelogs​​

​​httpd-2.4.6-97.el7.centos.1.x86_64 : Apache HTTP Server​​
​​Repo : updates​​
​​Matched from:​​
​​Filename : /usr/sbin/rotatelogs​​

​​httpd-2.4.6-97.el7.centos.2.x86_64 : Apache HTTP Server​​
​​Repo : updates​​
​​Matched from:​​
​​Filename : /usr/sbin/rotatelogs​​

​​httpd-2.4.6-97.el7.centos.4.x86_64 : Apache HTTP Server​​
​​Repo : updates​​
​​Matched from:​​
​​Filename : /usr/sbin/rotatelogs​​

​​httpd-2.4.6-97.el7.centos.5.x86_64 : Apache HTTP Server​​
​​Repo : updates​​
​​Matched from:​​
​​Filename : /usr/sbin/rotatelogs​​

安装httpd:

​​[root@localhost ~]​​​​# yum install httpd -y​​

查看 rotatelogs 安装后所在目录(验证安装是否成功):

​​[root@localhost ~]​​​​# whereis rotatelogs​​
​​rotatelogs: ​​​​/usr/sbin/rotatelogs​​​ ​​/usr/share/man/man8/rotatelogs​​​​.8.gz​​

编辑 bin/catalina.sh 文件(tomcat的启动文件):

​​1.找到下面行并把它用#注释掉​​
​​touch "$CATALINA_BASE"/logs/catalina.out​​
​​在新 Tomcat7 的 bin/catalina.sh 文件要注释的行是​​
​​touch "SCATALINA_OUT"​​

​​2.替换下面的行(有两处,不过一般在-security 中的那一行不需要去关注,不妨两处全替换了):​​
​​org.apache.catalina.startup.Bootstrop "$@" start \\​​
​​>> "$CATALINA_BASE"/logs/catalina.out 2>&1 &​​
​​修改为​​
​​org.apache.catalina.startup.Bootstrap "$@" start \\​​
​​2>&1 | /usr/sbin/rotatelogs "$CATALINA_BASE"/logs/catalina-%Y%m%d.out 86400 480 &​​
​​#为了与上方区分,这里日志的名字格式中,日期的年、月、日没有使用“-”隔开​​

​​在新 Tomcat7 的 bin/catalina.sh 中需要替换的行是​​
​​>> "$CATALINA_OUT" 2>&1 "&"​​
​​替换后该行的内容与上面是一样的​​

​​注:为什么 Tomcat7 后会有所不同,因为在它的 catalina.sh 文件中有如下定义​​
​​CATALINA_OUT="$CATALINA_BASE" /logs/catalina.out​​

​​3.保存 catalina.sh 文件并重启 Tomcat 即可​​
​​[root@localhost ~]# systemctl restart tomcat.service​​

查看日志分割结果:

​​[root@localhost ~]​​​​# ll -d /usr/local/tomcat/logs/catalina-20220610.out​​
​​-rw-r--r-- 1 tomcat tomcat 105380 Jun 10 17:22 ​​​​/usr/local/tomcat/logs/catalina-20220610​​​​.out​​
​​#可以看到已经存在(日志格式为了区分,其中日期的年、月、日没有使用“-”隔开,上方有提及)​​


3、方法三:使用脚本

Linux环境下切割日志脚本

​​将此脚本放到 tomcat 下的 bin 目录,在 ​​​​crontab​​​​中自动执行,shell脚本如下:​​
​​#!/bin/bash​​
​​cd​​​ ​​`​​​​dirname​​​ ​​$0`​​
​​d=`​​​​date​​​ ​​+%Y-%m-%d`​​
​​d7=`​​​​date​​​ ​​-d​​​​7 day ago​​​ ​​+%Y-%m-%d​​

​​cd​​​ ​​..​​​​/logs/​​

​​cp​​​ ​​catalina.out catalina.out.$d​​
​​echo​​​ ​​""​​​ ​​> catalina.out​​
​​rm​​​ ​​-rf catalina.out.$d7​​

这里就不进行演示了,如果需要自行测试

到此这篇关于Tomcat日志自动分割的三种方法的文章就介绍到这了

以上是关于tomcat 日志切割的主要内容,如果未能解决你的问题,请参考以下文章

tomcat日志切割和定期删除

Tomcat日志切割(logrotate)

Tomcat日志切割(logrotate)

使用cronolog实现tomcat日志切割

Shell脚本实现 tomcat 日志定时切割

cronolog切割tomcat日志以及日志导出方法