我正在研究以前托管在JBoss上的grails应用程序,但现在我们已经转移到Apache Tomcat。
使用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的“extras”库。下面是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 :(得分: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
有些事情可能会干扰您的日志记录:
如果您使用log4j进行服务器日志记录和Web应用程序日志记录,则可能同时将服务器和单个Web应用程序写入相同的文件。也就是说,两个记录器可能踩在彼此的脚趾上。确保每个log4j配置(服务器,每个webapp)都写入完全独立的文件。
如果系统时间(特别是时区)与Tomcat进程和/或查看日志文件的用户不同,您可能会发现日志文件在意外时间翻转。例如,我住在华盛顿特区,目前是UTC-04:00。如果Tomcat用户的时区设置为UTC但我的shell帐户配置为显示我的本地时间,则日志文件将在每天20:00而不是00:00进行翻转。但是,在这种情况下,日志条目应全部采用UTC格式,因此日志文件的内容不应混淆。