2017-04-20 161 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