2012-05-04 91 views
1

我在正確配置Log4j時遇到問題。我期待的Log4j像以下配置時,它在午夜轉動我的catalina.out的文件..


log4j.properties:Log4j每日滾動catalina.out而不重新啓動Tomcat?

log4j.rootLogger=INFO, CATALINA 

# Define all the appenders 
log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.CATALINA.File=/var/log/tomcat7/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-HH-mm'.log' 
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout 
log4j.appender.CATALINA.layout.ConversionPattern =%d{HH:mm:ss} %5p [%t] - %m%n 


配置我重新啓動Tomcat和後 全部寫入:

/var/log/tomcat7/catalina.out 


爲了測試我的配置我改變了當前的日期時間喜歡23:59:59:

#ls -l /var/log/tomcat7/ 
-rw-r--r-- 1 tomcat7 tomcat7 5840 4. May 00:00 catalina.out 


正如你所看到的,它並沒有在午夜旋轉......

(?)當重新啓動Tomcat它工作得很好:

#ls -l /var/log/tomcat7/ 
-rw-r--r-- 1 tomcat7 tomcat7 5840 4. May 13:37 catalina.out 
-rw-r--r-- 1 tomcat7 root 2395 4. May 00:00 catalina.out.*CURRENTDATE*.log 

是否有可能在不重新啓動Tomcat的情況下旋轉我的日誌文件?

由於提前, 馬利

回答

8

有此問題的三種解決方案:

  1. 改變默認的Tomcat日誌的外觀是寫入catalina.out中來,例如:SLF4J,用自帶的使用,並log4j的所有好處。
  2. 配置系統cron以運行tomcat日誌文件的logrotate
  3. 將默認日誌記錄類從ConsoleAppender更改爲FileAppender。

效益的解決方案:

  1. 爲SLF4J提供了許多選擇特別的log4j,您使用反正非常靈活。
  2. 簡單並且不需要觸摸tomcat配置。
  3. 禁用控制檯輸出

缺點配置簡單的變化:

  1. 需要附加庫,會影響Tomcat是託管的所有應用程序,需要與log4j的取代默認配置。
  2. cron + logrotate僅適用於linux;在調度程序的窗口中可能不那麼簡單。在Windows環境中需要額外的腳本。
  3. 只提供與日期簡單的備份。日期圖案不能設置。不壓縮旋轉的文件。對於第一個問題

    解決方案,描述描述here
    解決方案第二期here
    解決方案第三個問題是描述here

可以作爲很好地結合的解決方案。例如,使用crontab通過將catalina.out更改爲其他名稱創建的gzip文件。 我也建議離開tomcat,以便它記錄到catalina.out,並使用log4j將您的應用程序配置到不同的文件。這種來自tomcat的非實質性日誌不會垃圾你的日誌。

1

它甚至有可能無需重新啓動Tomcat的轉動我的日誌文件?

是的,如果你願意爲它工作。

您的log4j配置將最終與bin/catalina.sh用於將stdout重定向到logs/catalina.out的標準shell重定向結束。您不能簡單地使用log4j配置來更改System.out的行爲方式。

如果你想旋轉的conf/catalina.out中,你將不得不採取一些替代措施取決於如何啓動Tomcat:

  • 如果您使用的jsvc啓動Tomcat和您使用公共守護1.0 .4或更高版本,則可以將SIGUSR1發送到jsvc進程以重新打開日誌文件。這將允許你將現有的日誌文件移動到另一個文件(它只是改變它的名字並繼續登錄到新的文件名),然後'殺死SIGUSR1':原來的文件名將被重新打開,新的日誌信息將會去它。
  • 如果您使用bin/catalina.sh啓動Tomcat,則可以對其進行修改,使其不再執行重定向,而是將輸出管道輸出到滾動記錄器進程,如Apache httpd的rotatelogs或chronolog。