2017-10-24 27 views
0

私はwebappに次のlog4j RollingFileアペンダーを使用します。 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> 

、ログがロールオーバーされると、古いファイルはそのすべての古いファイルの名前を変更する必要があります、(%のIと指定された)インデックス番号のファイル名にリネーム取得し、保存しなければなりません。

次のコードを使用してログをプログラムでロールオーバーします。

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ログファイルを持っています。

関連する問題