Tomcat 7上的Grails应用程序:log4每日日志覆盖了旧的备份日志

Tomcat 7上的Grails应用程序:log4每日日志覆盖了旧的备份日志,tomcat,grails,log4j,rollingfileappender,Tomcat,Grails,Log4j,Rollingfileappender,我正在开发一个以前托管在JBoss上的grails应用程序,但现在我们已经迁移到ApacheTomcat JBoss上使用log4j的Grails应用程序工作得非常好,但是我们在使用apache Tomcat中的log4j进行应用程序日志记录和服务器日志记录时,遇到了org.apache.log4j.dailRollingFileAppender的问题 问题是,org.apache.log4j.DailyRollingFileAppender会覆盖旧的备份日志文件(例如,我们在日期8的日志中得到

我正在开发一个以前托管在JBoss上的grails应用程序,但现在我们已经迁移到ApacheTomcat

JBoss上使用log4j的Grails应用程序工作得非常好,但是我们在使用apache Tomcat中的log4j进行应用程序日志记录和服务器日志记录时,遇到了org.apache.log4j.dailRollingFileAppender的问题

问题是,
org.apache.log4j.DailyRollingFileAppender
会覆盖旧的备份日志文件(例如,我们在日期8的日志中得到日期9的日志,但找不到日期8的日志),有时它会开始记录前一天的备份文件

我不知道这个appender有什么问题,因为他们在JBoss上编写了
org.JBoss.logging.appender.dailrollingfileappender
wrapper。
org.apache.log4j.dailrollingfileappender是否存在任何问题?你能提出一个解决方案吗

<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>

我不确定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
有几件事可能会干扰您的日志记录:

  • 如果同时使用log4j进行服务器日志记录和webapp日志记录,则可能会使服务器和各个webapp都写入相同的文件。也就是说,两个伐木工人可能互相踩着对方的脚。确保每个log4j配置(服务器、每个webapp)都写入完全独立的文件

  • 如果系统时间(特别是时区)与Tomcat进程和/或查看日志文件的用户的时间不同,您可能会发现日志文件会在意外的时间滚动。例如,我住在华盛顿特区,现在是UTC-04:00。如果Tomcat用户的时区设置为UTC,但我的shell帐户配置为显示我的本地时间,那么日志文件将显示为每天20:00而不是00:00滚动。不过,在这种情况下,日志条目都应该是UTC格式的,这样日志文件的内容就不会混淆

  • 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