2017-04-20 63 views
0

我们在使用log4j 2.5进行日志记录事件的Tomcat容器上运行WAR部署。我们现在已经修改了部署的log4j2.xml配置,让日志文件每隔24小时滚动一次,但使用这种新配置,文件的滚动不会像我们预期的那样发生。log4j 2滚动文件未滚动

示例配置:

<RollingFile name="file" 
     fileName="${sys:catalina.base}/logs/${web:contextPath}.log" 
     filePattern="${sys:catalina.base}/logs/${web:contextPath}-%d{dd-MMM-yyyy}.log" 
     append="true"> 
     <PatternLayout pattern="%d{dd-MMM-yyyy HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" > 
      <header>LOG START DATE=${date:dd-MMM-yyyy HH:mm:ss.SSS} APP=${web:contextPath} TOMCAT=${env:HOSTNAME}:${env:CONNECTOR_PORT}${sys:line.separator}</header> 
      <footer>LOG END DATE=${date:dd-MMM-yyyy HH:mm:ss.SSS} APP=${web:contextPath} TOMCAT=${env:HOSTNAME}:${env:CONNECTOR_PORT}${sys:line.separator}</footer> 
     </PatternLayout> 
     <Policies> 
      <TimeBasedTriggeringPolicy/> 
     </Policies> 
    </RollingFile> 

任何想法,为什么翻车没有发生?

注:相同的配置,但与<CronTriggeringPolicy schedule="0 0 0 * * ?" />代替TimeBasedTriggeringPolicy做翻转,但是,在这种情况下,翻了个身文件获取与今天的文件名和不是昨天的日期创建日期。注意2:我们有其他类似配置的部署,每24小时翻滚一次,但这些配置的文件名硬编码,而不是使用${web:contextPath}。这个查询可能与RollingFile无法正常工作有关吗?

---编辑---

UPDATE:我们能够获得TimeBasedTriggeringPolicy使用上述配置翻转文件时的Tomcat实例运行在Windows上,但不是在Tomcat实例运行在Linux上。

回答

0

您的配置代码段没有任何问题,因为我获得了基于时间的滚动所需的行为。 为了测试,我将dd-MMM-yyyy更改为dd-MMM-yyyy-HH-mm,我的日志文件每分钟滚动一次。

它必须是别的东西,阻止你达到预期的行为。

我的设置1:

  • Log4j2 v2.8.2
  • 的Apache Tomcat 8.5.13
  • Windows 7企业版SP1

我的设置#2:

  • Log4j2 v2.5
  • 的Apache Tomcat 7.0.77
  • CentOS的7(1611)

我有以下3名的JAR在WEB-INF/lib中:

  • 的log4j-API-2.5.jar
  • log4j的-core-2.5.jar
  • 的log4j的web-2.5.jar

这是我供你参考完整log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="DEBUG"> 
    <Appenders> 
     <RollingFile name="RollingFileAppender" 
      fileName="${sys:catalina.base}/logs/${web:contextPath}.log" 
      filePattern="${sys:catalina.base}/logs/${web:contextPath}-%d{dd-MMM-yyyy-HH-mm}.log" 
      append="true"> 
      <PatternLayout pattern="%d{dd-MMM-yyyy HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" > 
       <header>LOG START DATE=${date:dd-MMM-yyyy HH:mm:ss.SSS} APP=${web:contextPath} TOMCAT=${env:HOSTNAME}:${env:CONNECTOR_PORT}${sys:line.separator}</header> 
       <footer>LOG END DATE=${date:dd-MMM-yyyy HH:mm:ss.SSS} APP=${web:contextPath} TOMCAT=${env:HOSTNAME}:${env:CONNECTOR_PORT}${sys:line.separator}</footer> 
      </PatternLayout> 
      <Policies> 
       <TimeBasedTriggeringPolicy/> 
      </Policies> 
     </RollingFile> 
    </Appenders> 
    <Loggers> 
     <Logger name="root" level="debug" additivity="false"> 
      <appender-ref ref="RollingFileAppender" level="debug"/> 
     </Logger> 
     <Root level="debug" additivity="false"> 
      <AppenderRef ref="RollingFileAppender"/> 
     </Root> 
    </Loggers> 
</Configuration> 
+0

在我们的结尾,我们目前被迫使用'log4j2 v2.5'罐子。我已经在Windows托管的Tomcat上运行部署,并且在窗口上滚动工作得很好,就像在您的设置中一样。但是,当Tomcat在Linux上运行时不行。我已经检查了WAR和Tomcat库中的所有jar版本,并且我很确定所有jar版本都匹配Linux和Windows设置。到目前为止,我可以在Linux上使用翻转工作的唯一方法是使用'CronTriggeringPolicy',而我已经将触发器设置为''0 59 23 * *?“'以确保翻转文件日期在前一天。 –

+0

我刚刚更新了我的答案,因为我也在Linux上成功测试过。你在使用哪种Linux? – VivekRatanSinha