Tomcat 日志切割及基础配置小技巧

总结了一下现在自己在用的日志切割方法和一些配置的方法,以供参考。Tomcat 切割 catalina.out 日志通常有三种方法,这里选择使用 cronolog。

首先编译安装 cronolog

1
2
3
4
5
wget http://cronolog.org/download/cronolog-1.6.2.tar.gz 
tar -zxf cronolog-1.6.2.tar.gz
cd cronolog
./configure
make && make install

然后修改 catalina.sh 将日志输出到 cronolog ,这里编写了一个脚本,请在 Tomcat 所在目录执行。

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash

EXEC_SH=./bin/catalina.sh
sed -i 's/eval $_NOHUP "/\(eval $_NOHUP "/' $EXEC_SH
sed -i '/"$CATALINA_OUT" 2/a \ \ \ \ \ \ 2>&1 & echo $! >&3 ) 3>$CATALINA_BASE/pid |/usr/local/sbin/cronolog "$CATALINA_BASE/logs/catalina-%Y-%m-%d.out" &' $EXEC_SH
sed -i '/"$CATALINA_OUT" 2/d' $EXEC_SH

echo " pstree -p \`cat \$CATALINA_BASE/pid\` |head -n1|sed -n 's/catalina.sh(\([0-9]*\)).*java(\([0-9]\+\)).*/\2/p' > \"\$CATALINA_PID\" " >demo

num=`sed -n '/echo $! > "$CATALINA_PID"/=' $EXEC_SH`
sed -i "${num} r demo" $EXEC_SH
sed -i '/echo $! > "$CATALINA_PID"/d' $EXEC_SH

修改后的脚本更改部分主要在大约 430 行左右。修改了日志输出和 CATALINA_PID 变量的获取方法。

修改添加 setenv.sh 用于添加基础配置。在 catalina.sh 脚本中 140 行左右可以看到以下代码。

1
2
3
4
5
if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
. "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
. "$CATALINA_HOME/bin/setenv.sh"
fi

于是可以在 setenv.sh 中配置脚本中需要使用到的变量来对 Tomcat 进行配置,这样可以更方便地对配置进行管理。其中建议配置CATALINA_PID 用于存储 Tomcat 启动后的主进程 pid;配置 JAVA_OPTS 则可以控制 jvm 程序参数。