Tomcat 7上的Grails应用程序:log4每日日志过度使用旧的备份日志

问题描述:

我正在使用以前托管在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> 

我不知道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,因此日志文件的内容不应混淆。