解决tomcat日记文件catalina.out过大问题

/ java / 没有评论 / 68浏览

前言

有用Tomcat的人,绝对都会遇到这样一个问题:catalina.out文件过大。

它是Tomcat默认生成的日志文件,会随着时间的推移,逐渐增大,不断的增长,甚至达到几G,几十G的大小。由于文件过大,不仅占系统的存储,我们还将无法使用过常规的编辑工具进行查看,严重影响系统的维护工作。

对此,出现了以下几种解决catalina.out文件过大的方案。

简洁型

每次监控到tomcat的硬盘空间变小达到阈值,手动登陆服务器,切换到tomcat的logs下,手动清空

echo > catalina.out

编写脚本,放入计划任务中,定时清空

crontab -e
sh /root/qin_catalina.out.sh

vim qin_catalina.out.sh
#!/usr/bin/bash 
echo > catalina.out

技术型

日志切割工具版0.1

使用cronolog日志切分工具切分Tomcat的catalina.out日志文件

wget http://cronolog.org/download/cronolog-1.6.2.tar.gz   (中国服务器可能无法下载或下载缓慢,可先下载到境外服务器上)

tar zxvf cronolog-1.6.2.tar.gz

./cronolog-1.6.2/configure

make

make install

(默认安装在/usr/local/sbin下)

在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"

Tomcat输出日志文件分割成功,输出log文件格式变为:catalina.2017-05-15.out

日志切割工具版0.2

CentOS6.5后自带logrotate程序,可以解决catalina.out的日志轮转问题

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 16M                                    当catalina.out文件大于16MB,就轮转
}
logrotate /etc/logrotate.conf
logrotate --force /etc/logrotate.d/tomcat

手工查找需要清理的日志文件

cd /usr/local/tomcat/logs
rm -rf catalina.out.4.gz
cat /var/lib/logrotate/logrotate.status
/usr/sbin/logrotate -f /etc/logrotate.d/tomcat

日志切割脚本版

使用cron每天来定时备份当前的catalina.out,然后清空他的内容

sh /root/qie_catalina.out.sh
#!/bin/bash 
 y=`date "+%Y"`
 m=`date "+%m"`
 d=`date "+%d"`

cp /etc/tomcat/logs/catalina.out  /etc/tomcat/logs/`catalina.out.$y_$m_$d`

echo " " > catalina.out

修改日志级别版

日志级别: SEVERE (highest value) > WARNING > INFO > CONFIG > FINE > FINER > FINEST (lowest value)

修改conf/logging.properties日志配置文件,将level级别设置成WARNING减少日志的输出。也可以设置成OFF,直接禁用。

catalina.org.apache.juli.FileHandler.level = WARNING

catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs

catalina.org.apache.juli.FileHandler.prefix = catalina.

logrotate日志切割不生效,问题追踪

[root ~]# /usr/sbin/logrotate -d /etc/logrotate.d/tomcat
Ignoring /etc/logrotate.d/tomcat because of bad file mode.
Allocating hash table for state file, size 15360 B

参考文件:logrotate 配置文件强制为 0644 属性

修改为644,又报because parent directory has insecure permissions

[root]# /usr/sbin/logrotate -d /etc/logrotate.d/tomcat
reading config file /etc/logrotate.d/tomcat
Allocating hash table for state file, size 15360 B

Handling 1 logs

rotating pattern: /www/server/tomcat/logs/catalina.out 1048576 bytes (20 rotations)
empty log files are rotated, old logs are removed
considering log /www/server/tomcat/logs/catalina.out
error: skipping "/www/server/tomcat/logs/catalina.out" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.

这是因为tomcat log 文件夹权限太高(777),改为7755或者0750都可以