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

어떤 아이디어가 왜 롤오버가 진행되지 않는 이유는 무엇입니까?

참고 : 동일한 구성이지만 TimeBasedTriggeringPolicy 대신 이 사용되지만이 경우 롤오버 된 파일은 오늘 날짜가 파일 이름에 있고 어제 날짜가 아닌 파일로 만들어집니다.

참고 : 24 시간마다 롤오버를 수행하는 유사한 구성의 다른 배포가 있지만 이러한 구성의 파일 이름은 ${web:contextPath} 대신 하드 코드됩니다. 이 조회는 RollingFile이 작동하지 않는 이유와 관련이 있습니까?

--- 편집 ---

UPDATE : 톰캣 인스턴스가 Windows에서 실행되지만 톰캣 인스턴스가 리눅스에서 실행되지 때 때 우리는 구성 이상 사용 롤오버 파일에 TimeBasedTriggeringPolicy을 얻을 수 있습니다.

답변

0

시간 기반 롤링의 원하는 동작을 얻으므로 구성 스 니펫에 아무런 문제가 없습니다. 테스트하려면 dd-MMM-yyyydd-MMM-yyyy-HH-mm으로 변경하고 매 로그 파일이 1 분마다 롤됩니다.

원하는 동작을 달성하지 못하게하는 다른 것이 있어야합니다.

내 설치 # 1 :

  • Log4j2의 v2.8.2
  • 아파치 톰캣 8.5.13
  • 윈도우 7 엔터프라이즈 SP1

내 설치 # 2 :

  • Log4j2 v2.5
  • 아파치 톰캣 7.0.77
  • 에 CentOS 7 (1611)

내가 가지고는에서 다음과 같은 3 JAR 파일 WEB-INF/lib 디렉토리 :

  • 의 log4j-API-2.5.jar
  • 의 log4j -core-2.5.jar
  • 의 log4j-웹-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' 항아리를 사용해야합니다.나는 윈도우 호스팅 톰캣에서 배포를 실행하고 윈도우에서 롤오버는 설정 에서처럼 잘 작동합니다. 그러나 Tomcat이 Linux에서 실행될 때가 아닙니다. WAR 및 Tomcat 라이브러리의 모든 jar 버전을 모두 검사했으며 모든 jar 버전이 Linux 및 Windows 설정간에 일치하는지 확실히 알고 있습니다. 지금까지 리눅스에서 롤오버를 사용할 수있는 유일한 방법은'CronTriggeringPolicy'를 대신 사용하고 있습니다. 롤오버 파일의 날짜가 전날과 같아 지도록 트리거를' "0 59 23 * *?"'으로 설정했습니다. –

+0

Linux에서 성공적으로 테스트 한 결과 내 대답이 업데이트되었습니다. 어떤 Linux를 사용하고 있습니까? – VivekRatanSinha

관련 문제