tomcat日志分割

今天在tomcat上查看项目日志的时候,发现catalina.out文件竟然已经达到202M了,决定做一下日志的分割.先看了一下crontab任务中,发现有个删除前10天日志的自动任务,但是没有发现切割的自动任务.
    放狗搜了一下,据说tomcat有默认的日志分割功能,能每天自动生成类似catalina.2010-10-08.log的文件,但是默认catalina.out文件却一直增长.据说到一定大小时占磁盘空间(废话),影响性能,且会报错,这点暂时没发现.其他的查了一下logs文件确实如此.
    解决方法,使用cronolog进行日志切割,据说cronolog是个切割日志的小工具,可以切割很多种日志文件,有空得试试.具体做法如下:
1、下载(最新版本)
# wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
2、解压缩

gzip -d cronolog-1.6.2.tar.gz
# tar -xvf cronolog-1.6.2.tar
3、进入cronolog安装文件所在目录
# cd  cronolog-1.6.2
4、运行安装
# ./configure
# make
# make install
5、查看cronolog安装后所在目录(验证安装是否成功)
# which cronolog
一般情况下显示为:/usr/local/sbin/cronolog
6.进入Tomcat的bin目录,打开catalina.sh文件,找到tomcat启动的相关行,或者你直接查找catalina.out,一般我们修改下面行中的内容(因为我们一般不会在-security条件下运行),
     else
    “$_RUNJAVA” $JAVA_OPTS  $CATALINA_OPTS \
    -Djava.endorsed.dirs=”$JAVA_ENDORSED_DIRS” -classpath “$CLASSPATH” \
    -Dcatalina.base=”$CATALINA_BASE” \
    -Dcatalina.home=”$CATALINA_HOME” \
    -Djava.io.tmpdir=”$CATALINA_TMPDIR” \
    org.apache.catalina.startup.Bootstrap “$@” start  \
    >> “$CATALINA_BASE”/logs/catalina.out 2>&1 &

    if [ ! -z "$CATALINA_PID" ]; then
    echo $! > $CATALINA_PID
    fi
    fi
修改
org.apache.catalina.startup.Bootstrap “$@” 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 >>  /dev/null &
同时,上面有一行
touch “$CATALINA_BASE”/logs/catalina.out
可以注释掉,完成之后重起Tomcat就可以了,在logs目录下可以看到catalina.2009-02-18.out的日志,是按日生成的。
以上内容均参考网络上的帖子,有一个地方不明白,一个地方需要明天验证.
不明白的:
"org.apache.catalina.startup.Bootstrap “$@” start 2>&1 \
|  /usr/local/sbin/cronolog “$CATALINA_BASE”/logs/catalina.%Y-%m-%d.out >>  /dev/null &"中为什么要加">> /dev/null"而不是直接">>  /usr/local/sbin/cronolog “$CATALINA_BASE”/logs/catalina.%Y-%m-%d.out"直接把输出都重定向到catalina.%Y-%m-%d.out文件.这个得找时间再查查,也希望知道的朋友留言告诉我一下.
需要验证的:
注释掉touch “$CATALINA_BASE”/logs/catalina.out以后,不产生catalina.out,那么当前输出是输出到今天的文件catalina.%Y-%m-%d.out吗?它会每日执行切割并定向到新的日志文件?没看到切割的定时任务,那么这个定时任务是由tomcat本身维护的?cronolog只是提供切割方法?(之前说到tomcat默认也提供切割,貌似都可以不需要cronolog,只要注释touch行就行...找机会试试)

对了,还看到另外一种解决方法,纯shell实现的.
编写一个.sh文件,并放到tomcat下的bin目录,在cron中自动执行,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}

同样有个问题cd `dirname $0` 没看懂什么意思
原来,
$0获取当前Shell程序的文件名
dirname $0,获取当前Shell程序的路径
cd `dirname  $0`,进入当前Shell程序的目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值