2017-10-24 3 views
0

내 webapp에 다음과 같은 log4j RollingFile appender를 사용합니다. filePattern="${env:SYSTEM_LOGS}/${env:LOG_FILE_NAME}.log.%d{yyyy_MM_dd.HH_mm_ss}.%i"log4j2 RollingFileAppender 이전 파일이 7 롤 오버 후 제거됨

<Appenders> 
    <RollingFile name="logFile" 
       fileName="${env:SYSTEM_LOGS}/${env:LOG_FILE_NAME}.log" immediateFlush="true" 
       filePattern="${env:SYSTEM_LOGS}/${env:LOG_FILE_NAME}.log.%d{yyyy_MM_dd.HH_mm_ss}.%i"> 
     <PatternLayout pattern="%d{yyyyMMdd-HHmmss.SSS}|%X{username}|%-5p|%t| %-100m (%c{1})%n"/> 
     <Policies> 
      <OnStartupTriggeringPolicy/> 
     </Policies> 
    </RollingFile> 
</Appenders> 

, 로그가 롤오버 될 때, 이전 파일은 그래서 모든 이전 파일의 이름을 변경을하셔야합니다, (%의 난으로 지정) 인덱스 번호와 파일 이름으로 이름이 변경됩니다 보존되어야한다.

다음 코드를 사용하여 프로그래밍 방식으로 로그를 롤오버합니다.

org.apache.logging.log4j.Logger logManagerLogger = LogManager.getLogger(); 
Map<String, org.apache.logging.log4j.core.Appender> appenders = ((org.apache.logging.log4j.core.Logger) logManagerLogger).getAppenders(); 
appenders.forEach((appenderName, appender) -> { 
    if (appender instanceof RollingFileAppender) { 
     LOGGER.info("Switching log for appender " + appenderName); 
     ((RollingFileAppender) appender).getManager().rollover(); 
    } 
}); 

그러나, 7 롤오버 후, 기존 파일이 제거됩니다 (지정된 filePattern에 따라 이름이 변경되지 않음) 새 파일에 계속 로그.

여기에 어떤 문제가있을 수 있습니까?

답변

1

세트 DefaultRolloverStrategy (기본값은 7), 사용자의 설정에있을 것입니다 :

<Appenders> 
    <RollingFile name="logFile" 
       fileName="${env:SYSTEM_LOGS}/${env:LOG_FILE_NAME}.log" immediateFlush="true" 
       filePattern="${env:SYSTEM_LOGS}/${env:LOG_FILE_NAME}.log.%d{yyyy_MM_dd.HH_mm_ss}.%i"> 
     <PatternLayout pattern="%d{yyyyMMdd-HHmmss.SSS}|%X{username}|%-5p|%t| %-100m (%c{1})%n"/> 
     <Policies> 
      <OnStartupTriggeringPolicy/> 
     </Policies> 
     <DefaultRolloverStrategy max="100"/> 
    </RollingFile> 
</Appenders> 

지금, 그것은 롤오버 (100) 로그 파일이있을 것이다.