處理Tomcat日誌catalina.out日誌文件過大的問題

處理Tomcat日誌catalina.out日誌文件過大的問題

最近遇到一個Tomcat日誌catalina.out日誌文件過大的問題,現總結如下:本人用第二種方法解決問題,本人認爲第二種更簡單容易操作!

一、採用cronlolog工具對日誌拆分的方式處理該問題

1、下載cronolog工具,我下載的版本是cronolog-1.6.2
(yum安裝:yum install cronolog)
2、將下載好的文件解壓,tar xvzf cronolog-1.6.2.tar.gz

3、切換到解壓後的文件目錄下:cd cronolog-1.6.2

4、初始化和編譯安裝

./configure  --prefix=/usr/local/cronolog
#make

#make install
#ln -s /usr/local/cronolog/sbin/* /usr/local/sbin/

5、查看安裝版本

#cronolog --version

6、修改tomcat的啓動文件(tomcat目錄/bin/catalina.sh)

vi catalina.sh

(1)修改輸出日誌路徑
修改:

 if [ -z "$CATALINA_OUT" ] ; then
       CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
fi

爲:

    if [ -z "$CATALINA_OUT" ] ; then
      CATALINA_OUT="$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out
fi

(2)刪除生成日誌文件
註釋:

touch "$CATALINA_OUT"
   爲:
#touch "$CATALINA_OUT"

(3)修改啓動腳本參數(兩項)
修改:
org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 "&"
爲:
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
| /usr/local/sbin/cronolog "$CATALINA_OUT" >> /dev/null &
7、重啓tomcat
tomcat輸出日誌文件分割成功,輸出log文件格式爲:catalina.2015-06-30.out

二、利用Linux自帶的logrotate程序來解決catalina.out的日誌輪轉問題

1.首先編輯logrotate.conf文件,打開compress選項(去掉註釋)

[root@localhost ~]# cat /etc/logrotate.conf | grep -v "^$"| grep -v "#"
weekly
rotate 4
create
dateext
compress   <<這一項

2.添加指定文件,在/etc/logrotate.d/目錄下新建一個名爲tomcat的文件

[root@localhost ~]# cat > /etc/logrotate.d/tomcat <<EOF
/home/tomcat/utr/logs/catalina.out{ #要輪轉的文件
    copytruncate    # 創建新的catalina.out副本後,截斷源catalina.out文件
    daily    # 每天進行catalina.out文件的輪轉
    rotate 7     # 至多保留7個副本
    missingok    # 如果要輪轉的文件丟失了,繼續輪轉而不報錯
    compress     # 使用壓縮的方式(節省硬盤空間;一個2~3GB的日誌文件可以壓縮成60MB左右)
    size 16M     # 當catalina.out文件大於16MB時,就輪轉
}
EOF

參數說明:

copytruncate #備份日誌並截斷源文件
nocopytruncate # 備份日誌文件不截斷
dateext #使用當期日期作爲命名格式
notifempty #當日志文件爲空時,不進行輪轉
daily # 每天進行文件的輪轉
size 16M # 當文件大於16MB時,就會輪轉
rotate 30 #指定日誌文件刪除之前轉儲的次數

3.執行方式
①自動執行原理

1.每天晚上crond守護進程會運行在/etc/cron.daily目錄中的任務列表;
2.與logrotate相關的腳本也在/etc/cron.daily目錄中。運行的方式爲"/usr/bin/logrotate /etc/logrotate.conf";
3./etc/logrotate.conf文件include了/etc/logrotate.d/目錄下的所有文件。還包括我們上面剛創建的tomcat文件;
4./etc/logrotate.d/tomcat文件會觸發/usr/local/apache-tomcat-8.0.28/logs/catalina.out文件的輪轉。

②手動執行:logrotate /etc/logrotate.conf
③只輪轉剛剛的tomcat配置文件:logrotate --force /etc/logrotate.d/tomcat

三、Tomcat7.0.55下使用Log4j 接管 catalina.out 日誌文件生成方式,按天存放,解決catalina.out日誌文件過大問題

  1. 準備jar包:
    log4j-1.2.17.jar (從 http://www.apache.org/dist/logging/log4j/1.2.17/ 下載)
    tomcat-juli.jar, tomcat-juli-adapters.jar (從http://www.apache.org/dist/tomcat/tomcat-7/v7.0.55/bin/extras/下載,根據你的Tomcat版本選擇對應的分支)
  2. 將上面的三個jar包拷貝到 Tomcat 的 lib 目錄下;
  3. 將 tomcat-juli.jar 拷貝到 Tomcat 的 bin 目錄下,替換原有的jar包;
  4. 修改 Tomcat 的 conf/context.xml 文件,將<Context>爲<Context swallowOutput="true">
    (增加 swallowOutput="true" 的屬性配置,只有這樣才能完全的把tomcat的stdout給接管過來。這一步很關鍵 在官網及網上找了許多資料都沒有提及。);
  5. 刪除 Tomcat 的 conf/logging.properties 文件(或者重命名-建議);
  6. 在 Tomcat 的 lib 目錄下創建 log4j.properties 文件,然後重啓服務器:
log4j.rootLogger=INFO, CATALINA
log4j.logger.org.apache=INFO, CATALINA
log4j.logger.org.[hibernate](http://lib.csdn.net/base/javaee)=WARN, CATALINA
log4j.logger.org.springframework=WARN, CATALINA

# Define all the appenders
log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File=${catalina.base}/logs/catalina.out
log4j.appender.CATALINA.Append=true
log4j.appender.CATALINA.Encoding=UTF-8
# Roll-over the log once per day
log4j.appender.CATALINA.DatePattern=’.‘yyyy-MM-dd’.log’
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.LOCALHOST=org.apache.log4j.DailyRollingFileAppender
log4j.appender.LOCALHOST.File=${catalina.base}/logs/localhost.
log4j.appender.LOCALHOST.Append=true
log4j.appender.LOCALHOST.Encoding=UTF-8
log4j.appender.LOCALHOST.DatePattern=’.‘yyyy-MM-dd’.log’
log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.MANAGER=org.apache.log4j.DailyRollingFileAppender
log4j.appender.MANAGER.File=${catalina.base}/logs/manager.
log4j.appender.MANAGER.Append=true
log4j.appender.MANAGER.Encoding=UTF-8
log4j.appender.MANAGER.DatePattern=’.‘yyyy-MM-dd’.log’
log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.HOST-MANAGER=org.apache.log4j.DailyRollingFileAppender
log4j.appender.HOST-MANAGER.File=${catalina.base}/logs/host-manager.
log4j.appender.HOST-MANAGER.Append=true
log4j.appender.HOST-MANAGER.Encoding=UTF-8
log4j.appender.HOST-MANAGER.DatePattern=’.‘yyyy-MM-dd’.log’
log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding=UTF-8
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

# Configure which loggers log to which appenders
# Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=INFO, LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]=
INFO, MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]=
INFO, HOST-MANAGER

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