使用cronolog轮循(rotating)Tomcat日志

使用cronolog轮循(rotating)Tomcat日志

一、本文基于的环境:

操作系统:Linux(redhat)、Windows(XP、2003)

JDK版本:j2sdk<?xml:namespace prefix = st1 />_04

Tomcat版本:tomcat-

Cronolog版本:cronolog-.tar.gz

                     cronolog--win32.zip

本文修改后的tomcat都是按日保存日志文件,文件格式如:catalina..out


二、cronolog的简介(下载cronolog

Cronolog是一款日志轮循(rotation)工具,可以用它来把Apache、Tomcat等Web服务器上输出的日志切分成按日或月保存的文件。

Cronolog从标准输入中读取日志内容,然后把它们写到按指定格式命名的日志文件中。日志文件的名称可以加入一段日期标记(如Catalina..out),当日期改变后Cronolog会把之前的日志文件关闭,再打开一个包含新日期的日志文件(如Catalina..out)。

利用Cronolog可以完美解决tomcat中的catalina.out日志文件不断增大,且不能在tomcat运行期间删除的问题。

需要注意的一个问题是,日期改变后cronolog并不是马上切换日志文件,而是需要有新的日志输出才能触发cronolog切换日志文件。所以如果你想在删除的日志文件,如果从的00:00开始到你执行删除时都没有日志输出,则的日志文件可能仍然被占用着,导致删除失败。




三、Linux下使用Cronolog轮循(rotating)Tomcat日志

(1)首先安装cronolog(cronolog-.tar.gz放于/opt下)

cd /opt

gzip–d cronolog-.tar.gz

tar–xvf cronolog-.tar

cd cronolog-

./configure --prefix=/usr/local/cronolog //按自己需要指定安装路径,或不指定

make

make install

   (2)修改Tomcat配置文件

先停止tomcat服务,然后修改以下文件:

%CATALINA_HOME%/bin/catalina.sh

org.apache.catalina.startup.Bootstrap "$@" start \

>> "$CATALINA_BASE"/logs/catalina.out 2>&1 &



替换为:

org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \

| /usr/local/cronolog/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &



另外删除行:

touch "$CATALINA_BASE"/logs/catalina.out

修改完毕后重新启动tomcat服务。



四、Windows下使用Cronolog轮循(rotating)Tomcat日志

(1)安装cronolog

解压cronolog--win32.zip,将cronolog.exe文件拷贝到Tomcat的bin目录下。


(2)修改Tomcat配置

在Windows下,tomcat默认是把日志内容直接输出到控制台的,而不是保存在catalina.out文件,所以要先修改为把日志内容输出到文件。

首先修改%CATALINA_HOME%/bin/startup.bat,将

call "%EXECUTABLE%" start %CMD_LINE_ARGS%

替换为:

call "%EXECUTABLE%" run %CMD_LINE_ARGS%



然后修改%CATALINA_HOME%/bin/catalina.bat,将

rem Execute Java with the applicable properties

if not "%JPDA%" == "" goto doJpda

if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

goto end

:doSecurity

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

goto end

:doJpda

if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

goto end

:doSecurityJpda

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

goto end

替换为:

rem Execute Java with the applicable properties

if not "%JPDA%" == "" goto doJpda

if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% |%CATALINA_BASE%\bin\cronolog %CATALINA_BASE%\logs\catalina.%date:~0,10%.out >> null (应该是catalina.%%Y-%%m-%%d.out)

goto end

:doSecurity

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% |%CATALINA_BASE%\bin\cronolog %CATALINA_BASE%\logs\catalina.%date:~0,10%.out >> null (应该是catalina.%%Y-%%m-%%d.out)

goto end

:doJpda

if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% |%CATALINA_BASE%\bin\cronolog %CATALINA_BASE%\logs\catalina.%date:~0,10%.out >> null (应该是catalina.%%Y-%%m-%%d.out)

goto end

:doSecurityJpda

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% |%CATALINA_BASE%\bin\cronolog %CATALINA_BASE%\logs\catalina.%date:~0,10%.out >> null (应该是catalina.%%Y-%%m-%%d.out)

goto end

   修改完之后重新启动tomcat。




用于Windows环境的补充(2009-06-13):

        写这篇文章的时候,在Windows下的配置还没有测试过,其实上面的写法是错误的!之前在windows下日志文件名使用“catalina.%Y-%m-%d.out”的方式生成的日志文件变成“catalina.md.out”的样子,并不是日期!然而使用上面的“catalina.%date:~0,10%.out"得出的文件名是“catalina.2009-06-13.out",其中的日期是tomcat启动时的日期,但是日志文件并不会随着日期改变而轮循(rotating)!

        其实不管是在linux还是windows下,cronolog接受的日期格式都是“%Y%m%d%H%M“这样的格式。%Y表年,%m表月,%d表日,%H表小时,%M表分钟。只有使用这样的格式指定日志输出文件的名称,cronolog才会按日期、时间的变化生成新的日志文件。

        然而,在Windows下需要分两种情况(刚在cronolog-1.6.1.win32所带的INSTALL说明中看到):

Configuration for use with NT service:
TransferLog "|c:/apache/bin/convlog.exe c:/apache/logs/access%Y%m%d.log"

       

Configuration for use from command line:
TransferLog "|c:/apache/bin/convlog.exe c:/apache/logs/access%%Y%%m%%d.log"


        也就是说,如果是通过命令行方式来启动tomcat的话,日志文件名的写法必须是“catalina.%%Y-%%m-%%d.out”才是正确的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值