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