tomcat Catalina.ou按日保存日志文件分割方法


轉:http://tanrishou.blog.163.com/blog/static/1502502009924112045630/

一、本文基於的環境:

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

JDK版本:j2sdk1.4.2_04

Tomcat版本:tomcat-5.0.28

Cronolog版本:cronolog-1.6.2.tar.gz

                     cronolog-1.6.1-win32.zip

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

二、cronolog的簡介(下載cronolog

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

Cronolog從標准輸入中讀取日志內容,然后把它們寫到按指定格式命名的日志文件中。日 志文件的名稱可以加入一段日期標記(如 Catalina.2009-06-07.out),當日期改變后Cronolog會把之前的日志文件關閉,再打開一個包含新日期的日志文件(如 Catalina.2009-06-08.out)。

利用Cronolog可以完美解決tomcat中的catalina.out日志文件不斷增大,且不能在tomcat運行期間刪除的問題。

需要注意的一個問題是,日期改變后cronolog並不是馬上切換日志文件,而是需要有新的 日志輸出才能觸發cronolog切換日志文件。所以如果你想 在2009-06-08刪除2009-06-07的日志文件,如果從2009-06-08的00:00開始到你執行刪除時都沒有日志輸出,則 2009-06-07的日志文件可能仍然被占用着,導致刪除失敗。

 

 

 

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

(1)首先安裝cronolog(cronolog-1.6.2.tar.gz放於/opt下)

cd /opt

gzip –d cronolog-1.6.2.tar.gz

tar –xvf cronolog-1.6.2.tar

cd cronolog-1.6.2

./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-1.6.1-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”才是正確的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM