使用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”纔是正確的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章