今天在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、解压缩
# 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/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程序的目录
分享到:
相关推荐
tomcat日志自动分割,可配置,附带tomcat防止重复启动问题
自己写的tomcat日志分割脚本,自动分割日志,自动删除过期日志,也可以用于其他容器日志分割,稍加修改即可
tomcat日志分割 先安装 cronolog yum install -y cronolog httpd cronolog安装路径为/usr/sbin/cronolog 然后用我的文件覆盖tomcat/bin下面的catalina.sh文件 重启tomcat便可
windows下tomcat的catalina.out按天自动分割,windows下tomcat日志按天自动分割
Tomcat 日志切割 logrotate是个强大的...如下对Tomcat日志catalina.out日志切割 # ls -lh /usr/local/tomcat/logs/catalina.out -rw-r--r-- 1 www www 14M Aug 28 15:55 /usr/local/tomcat/logs/catalina.out 配置
主要介绍了Linux下把tomcat日志按日期自动分割的相关资料,需要的朋友可以参考下
Linux下面的 tomcat cronolog日志分隔包,帮助网管实现自动分割tomcat下面的catalina.sh
Tomcat 8.0.30 配置log4j自动按天分割日志保存
系统日志是一个很重要的东西但同时如果我们不定时清除空间就会给日志占完了,下面我来介绍定期删除日志实现方法,各位同学可参考。...不过使用脚本的时候需要将Nginx的日志文件进行自动分割,否则会删除正在
cronolog配合tomcat在windows下按照日期自动分割tomcat的日志
cronolog配合tomcat在windows下,按照日期自动分割tomcat的日志
Windows家族,Tomcat JDK6.0 本书19~21章所附代码的调试环境 IE 6.0及以上版本 2.调试环境 本书7~10章所附代码的调试环境 Windows家族,.NET Framework 2.0及以上版本 Visual Studio 2005及以上版本、ASP.NET...
用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...
用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...