解决catalina.out⽂件过⼤的问题
前⾔
有⽤Tomcat的,绝对都会遇到这样⼀个问题:catalina.out⽂件过⼤。
它是Tomcat默认⽣成的⽇志⽂件,会随着时间的推移,逐渐增⼤,不断的增长,甚⾄达到⼏G,⼏⼗G的⼤⼩。由于⽂件过⼤,不仅占系统的存储,我们还将⽆法使⽤过常规的编辑⼯具进⾏查看,严重影响系统的维护⼯作。
对此,出现了以下⼏种解决catalina.out⽂件过⼤的⽅案。
暴⼒型
除⾮不需要⽇志,否则不建议使⽤
1.⼿动版
每次监控到tomcat的硬盘空间变⼩达到阈值,⼿动登陆服务器,切换到tomcat的logs下,⼿动清空
echo " "  > catalina.out
2.脚本
编写脚本,放⼊计划任务中,定时清空
crontab -e
0 24 * * *    sh /root/qin_catalina.out.sh
vim qin_catalina.out.sh
#!/usr/bin/bash
echo " " > catalina.out
技术型
1.⽇志切割⼯具版0.1
使⽤cronolog⽇志切分⼯具切分Tomcat的catalina.out⽇志⽂件
<1>下载cronolog,并进⾏安装
wget /download/cronolog-1.6.  (中国服务器可能⽆法下载或下载缓慢,可先下载到服务器上)
tar zxvf cronolog-1.6.
./cronolog-1.6.2/configure
make
make install
(默认安装在/usr/local/sbin下)
<2>.配置
在tomcat/bin/catalian.sh中
org.apache.catalina.startup.Bootstrap "$@" start \ >> "$CATALINA_BASE"/logs/catalina.out 2&1 &
改成:
org.apache.catalina.startup.Bootstrap"$@" start \ |/usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null 2>&1 &
org.apache.catalina.startup.Bootstrap  "$@"  start  2>&1  \  |  /usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &
并注释    touch "$CATALINA_OUT"
<3>重启Tomcat
Tomcat输出⽇志⽂件分割成功,输出log⽂件格式变为:catalina.2017-05-15.out
1.⽇志切割⼯具版0.2
CentOS6.5后⾃带logrotate程序,可以解决catalina.out的⽇志轮转问题
<1>在/etc/logrotate.d/⽬录下新建⼀个tomcat的⽂件
cat >/etc/logrotate.d/tomcat
/usr/local/tomcat/logs/catalina.out{            要轮转的⽂件
copytruncate                                创建新的catalina.out副本,截断源catalina.out⽂件
daily                                      每天进⾏catalina.out⽂件的轮转
rotate 7                                    ⾄多保留7个副本
missingok                                  ⽂件丢失了,轮转不报错
compress                                    使⽤压缩
size 500M                                    当catalina.out⽂件⼤于16MB,就轮转
}
其他参数:
compress                                  通过gzip 压缩转储以后的⽇志
nocompress                                不做gzip压缩处理
copytruncate                              ⽤于还在打开中的⽇志⽂件,把当前⽇志备份并截断;是先拷贝再清空的⽅式,拷贝和清空之间有⼀个时间差,可能会丢失部分⽇志数据。
nocopytruncate                            备份⽇志⽂件不过不截断
create mode owner group                    轮转时指定创建新⽂件的属性,如create 0777 nobody nobody
nocreate                                  不建⽴新的⽇志⽂件
delaycompress                              和compress ⼀起使⽤时,转储的⽇志⽂件到下⼀次转储时才压缩
nodelaycompress                            覆盖 delaycompress 选项,转储同时压缩。
missingok                                  如果⽇志丢失,不报错继续滚动下⼀个⽇志
errors address                            专储时的错误信息发送到指定的Email 地址
ifempty                                    即使⽇志⽂件为空⽂件也做轮转,这个是logrotate的缺省选项。
notifempty                                当⽇志⽂件为空时,不进⾏轮转
mail address                              把转储的⽇志⽂件发送到指定的E-mail 地址
nomail                                    转储时不发送⽇志⽂件
olddir directory                          转储后的⽇志⽂件放⼊指定的⽬录,必须和当前⽇志⽂件在同⼀个⽂件系统
noolddir                                  转储后的⽇志⽂件和当前⽇志⽂件放在同⼀个⽬录下
sharedscripts                              运⾏postrotate脚本,作⽤是在所有⽇志都轮转后统⼀执⾏⼀次脚本。如果没有配置这个,那么每个⽇志轮转后都会执⾏⼀次脚本
prerotate                                  在logrotate转储之前需要执⾏的指令,例如修改⽂件的属性等动作;必须独⽴成⾏
postrotate                                在logrotate转储之后需要执⾏的指令,例如重新启动(kill -HUP)某个服务!必须独⽴成
daily                                      指定转储周期为每天
weekly                                    指定转储周期为每周
monthly                                    指定转储周期为每⽉
rotate count                              指定⽇志⽂件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
dateext                                    使⽤当期⽇期作为命名格式
dateformat .%s                            配合dateext使⽤,紧跟在下⼀⾏出现,定义⽂件切割后的⽂件名,必须配合dateext使⽤,只⽀持 %Y %m %d %s 这四个参数
size(或minsize) log-size                  当⽇志⽂件到达指定的⼤⼩时才转储,log-size能指定bytes(缺省)及KB (sizek)或
<2>当执⾏以上操作时是⾃动执⾏的,也可⼿动切割
logrotate /f
如果只轮转tomcat配置⽂件,要指定⽂件
logrotate --force /etc/logrotate.d/tomcat
<3>删除要清理的⽇志
⼿⼯查需要清理的⽇志⽂件
cd /usr/local/tomcat/logs
rm -rf catalina.
2.⽇志切割脚本版
使⽤cron每天来定时备份当前的catalina.out,然后清空他的内容;
<1>crontab -e
01 0 * * *  sh /root/qie_catalina.out.sh
<2>cat qie_catalina.out.sh 参考脚本
#!/bin/bash
DATE=`date "+%Y-%m-%d"`
cp /etc/tomcat/logs/catalina.out  /etc/tomcat/logs/`catalina.out.$DATE`
大文件发送
wait
echo " " > catalina.out
3.修改⽇志级别版
⽇志级别:
SEVERE (highest value) > WARNING > INFO > CONFIG > FINE > FINER > FINEST (lowest value)
<1>修改conf/logging.properties⽇志配置⽂件,将level级别设置成WARNING减少⽇志的输出。也可以设置成OFF,直接禁⽤。apache.juli.FileHandler.level = WARNING