Tomcat日志catalina.out自动分割(linux)
默认情况下,tomcat的catalina.out日志文件是没有像其它日志一样,按日期进行分割,而是全部输出全部写入到一个catalina.out,这样日积月累就会造成.out日志越来越大,给管理造成了不便,为了实现像其它日志文件一样按日期归档,这里我们采用cronolog来完成日志分割。
一、安装cronolog
yum 安装
使用cronolog包实现按日期分割catalina.out日志文件
yum install cronolog
或是 源码安装
1、下载(最新版本)
wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
2、解压缩
tar zxvf cronolog-1.6.2.tar.gz
3、进入cronolog安装文件所在目录
cd cronolog-1.6.2
4、运行安装
./configure
make
make install
5、查看cronolog安装后所在目录(验证安装是否成功)
which cronolog
/usr/sbin/cronolog
二、修改bin/catalina.sh文件。
具体如下:
shift
touch "$CATALINA_OUT"
if [ "$1" = "-security" ] ; then
if [ $have_tty -eq 1 ]; then
echo "Using Security Manager"
fi
shift
eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
-classpath "\"$CLASSPATH\"" \
-Djava.security.manager \
-Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
-Dcatalina.base="\"$CATALINA_BASE\"" \
-Dcatalina.home="\"$CATALINA_HOME\"" \
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 "&"
else
eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-D$ENDORSED_PROP="\"$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_OUT" 2>&1 "&"
fi
改为:
shift
#touch "$CATALINA_OUT"
if [ "$1" = "-security" ] ; then
if [ $have_tty -eq 1 ]; then
echo "Using Security Manager"
fi
shift
eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
-classpath "\"$CLASSPATH\"" \
-Djava.security.manager \
-Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
-Dcatalina.base="\"$CATALINA_BASE\"" \
-Dcatalina.home="\"$CATALINA_HOME\"" \
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &
else
eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
-classpath "\"$CLASSPATH\"" \
-Dcatalina.base="\"$CATALINA_BASE\"" \
-Dcatalina.home="\"$CATALINA_HOME\"" \
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &
fi
修改后,重启 Tomcat
systemctl restart tomcat
然后查看一下 catalina.out 将会自动生成 catalina.2019-03-26.out
[root@Temp logs]# ls -l
总用量 796
-rw-r----- 1 root root 355008 3月 26 00:32 catalina.2019-03-26.log
-rw-r----- 1 root root 453507 3月 26 00:32 catalina.2019-03-26.out
-rw-r----- 1 root root 0 3月 26 00:35 host-manager.2019-03-26.log
-rw-r----- 1 root root 562 3月 26 00:31 localhost.2019-03-26.log
-rw-r----- 1 root root 0 3月 26 00:31 localhost_access_log.2019-03-26.txt
-rw-r----- 1 root root 0 3月 26 00:35 manager.2019-03-26.log
下面我们要做的是定期清理这些过期的文件,我们可以通过crontab来实现
crontab -e
30 3 * * * /bin/find /usr/local/tomcat/logs/ -mtime +7 -type f -name "catalina.*.out" -exec /bin/rm -f {} \;
每天凌晨3点半执行清除7天之前过期日志