Tomcat – 1. 如何Rotate Tomcat catalina.out

Tomcat - 1. 如何Rotate Tomcat catalina.out

一、概述

在Unix上运行Tomcat时,控制台输出(console output)一般被重定向到catalina.out。所有写入到System.err/out的内容都将被写入这个文件。包括:

  • java.lang.ThreadGroup.uncaughtException(..)打印的未捕获异常
  • 线程转储(如果是通过system信号触发的)

在Context里面设置swallowOutput属性,可以将老应用里面的直接调用System.out/err时的输出重定向到日志系统。但是该属性尤其限制:它只适用于直接调用System.out/err时,并且只在请求处理阶段。

默认catalina.out不会rotate,如果catalina.out大小超过2GB,则tomcat会挂掉,无法启动,并且不显示任何异常。要避免这种情况,需要经常rotate catalina.out。
本文介绍两种方法来按天或者按大小来rotate。

二、方法1:基于/usr/sbin/logrotate实现 按天或者当size大于2M时,自动rotate

需要管理员权限。

1. 操作步骤

1.1 创建如下文件

/etc/logrotate.d/tomcat

1.2 在上面文件中写入如下内容:

/home/ops/gongdaoshun/tomcat7-fms-ni/logs/catalina.out {
   copytruncate
   daily
   rotate 7
   compress
   missingok
   size 2M
   }

2. 配置文件的效果

daily: 每天rotate
rotate 7: 至多保留7个日志文件
compress: 压缩rotate后的文件
size 2M: 当日志大于2M时rotate

3. 工作原理

每晚cron守护进程会运行罗列在/etc/cron.daily/目录下的任务;
这会触发/etc/cron.daily/logratate文件,此文件一般在安装linux时被放入,它会执行命令: “/usr/sbin/logrotate /etc/logrotate.conf“;
/etc/logrotate.conf包含了/etc/logrotate.d/下的所有脚本;
最终触发/etc/logrotate.d/tomcat

4. 手动触发日志rotate

执行/usr/sbin/logrotate /etc/logrotate.conf即可。

5. 设置crontab

如果不想每天晚上才去check,而想每隔一段时间就去check以下,则可以设置crontab。
例如如下设置,使得linux没隔一个小时去查看日志带下,并在必要时rotate。

* */1 * * * /usr/sbin/logrotate /etc/logrotate.conf

注意,设置crontab的用户要具有执行logrotate的权限。

三、方法2:将tomcat的日志有java log切换成Log4j,实现按天rotate

切换操作指南:
http://tomcat.apache.org/tomcat-7.0-doc/logging.html#Using Log4j

参考链接:

https://dzone.com/articles/how-rotate-tomcat-catalinaout
http://tomcat.apache.org/tomcat-7.0-doc/logging.html
https://wiki.apache.org/tomcat/FAQ/Logging#Q10

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论