2012-08-10 61 views
0

我正在使用以前託管在JBoss上的grails應用程序,但現在我們已轉移到Apache Tomcat。Tomcat 7上的Grails應用程序:log4每日日誌過度使用舊的備份日誌

使用log4j在JBoss上的Grails應用程序完美地工作,但我們正在面臨org.apache.log4j.DailyRollingFileAppender的問題,因爲我們在Apache Tomcat中使用log4j進行應用程序日誌記錄和服務器日誌記錄。

問題是org.apache.log4j.DailyRollingFileAppender會覆蓋舊的備份日誌文件(例如,我們在日期8的日誌中找到日期9的日誌,並且沒有找到日誌8),有時它會開始在前一天的備份文件中進行日誌記錄。

我不知道這個appender有什麼問題,因爲在JBoss上他們寫了org.jboss.logging.appender.DailyRollingFileAppender包裝。 org.apache.log4j.DailyRollingFileAppender有問題嗎?你能否提出一個解決方案?

<appender class="org.apache.log4j.DailyRollingFileAppender" name="FILE"> 
    <errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/> 
<param name="Threshold" value="INFO"/> 
<param name="File" value="${catalina.base}/logs/applog.log"/> 
<param name="Append" value="true"/> 
     <param name="DatePattern" value="'.'yyyy-MM-dd"/> 
      <layout class="org.apache.log4j.PatternLayout"> 
       <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS Z} level=%-5p class=%c %X{uniqueId} %X{hostname} %X{requestURI} %X{clientIP} %X{userId} %X{realmId} %X{sessionId} %X{locale} %X{callingHost} %X{uniqueIdCallingHost} %X{asyncUserId} %X{isAsync} %X{taskId} %m%n"/> 
     </layout> 
    </appender> 

由於這不起作用,我們使用org.apache.log4j.rolling.RollingFileAppender使用log4j的「額外」庫。下面是appender配置,但它仍然無法正常工作。

<appender name="ROLL" class="org.apache.log4j.rolling.RollingFileAppender"> 
    <param name="File" value="${catalina.base}/logs/paymentRolling.log" /> 
    <param name="Threshold" value="INFO"/> 
    <param name="Append" value="true"/> 
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> 
     <param name="FileNamePattern" value="${catalina.base}/logs/appRolling.log.%d{yyyy-MM-dd}"/> 
    </rollingPolicy> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS Z} level=%-5p class=%c %X{uniqueId} %X{hostname} %X{requestURI} %X{clientIP} %X{userId} %X{realmId} %X{sessionId} %X{locale} %X{callingHost} %X{uniqueIdCallingHost} %X{asyncUserId} %X{isAsync} %X{taskId} %m%n"/> 
    </layout> 
    </appender> 

回答

0

我不知道XML配置如何發揮成的一切,但它看起來非常相似,它的工作原理完全一樣,我們期望它的工作我們(基於屬性的)配置:

This is our log4j configuration and it works exactly as we expect it to: 
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.A1.file = /path/to/logs/log4j.log 
# Roll-over the log once a day 
log4j.appender.A1.DatePattern='.'yyyy-MM-dd 
log4j.appender.A1.layout = org.apache.log4j.PatternLayout 
log4j.appender.A1.layout.conversionPattern = %d [%t] %-5p %c- %m%n 
log4j.appender.A1.append = true 

有一對夫婦的事情,可能會與你的日誌會干擾:

  1. 如果你正在使用用於服務器日誌記錄和Web應用程序日誌記錄log4j的,你可能有服務器和個人的webapps WRI對相同的文件。也就是說,這兩位伐木者可能會踩着彼此的腳趾。確保每個log4j配置(服務器,每個webapp)正在寫入完全獨立的文件。

  2. 如果系統時間(尤其是時區)與Tomcat進程和/或查看日誌文件的用戶的時間不同,您可能會發現日誌文件在意外時間翻轉。例如,我住在華盛頓特區,現在是UTC-04:00。如果Tomcat用戶的時區設置爲UTC,但我的shell帳戶配置爲顯示我的本地時間,則日誌文件將顯示爲每天20:00而不是00:00的翻滾。但是,在這種情況下,日誌條目應該都是UTC,因此日誌文件的內容不應混淆。

相關問題