解决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
发布评论