2016-04-30 16 views
1

期待値は同じ名前(つまりtest.log)の であり、アーカイブファイル名はtest_(CurrentDate).log.1である必要があります。log4jを使用して、以下のログファイル構造を使用できますか?

/logs/projectlogs/test.log

/ログ/ projectlogs/test_20160430.log.1

/ログ/ projectlogs/test_20160430.log.2

/ログ/ projectlogs/test_20160430.log.3

以下のプロパティファイルを使用すると、現在の日付がすべてのファイルに追加されます。

log4j.properties ::

log4j.rootLogger= ALL, A1, file, rollingAppender 
#log4j.date=contains current date 
log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=C:/logs/projectlogs/test_${log4j.date}.log 
log4j.appender.file.MaxFileSize=100KB 
log4j.appender.file.MaxBackupIndex=5 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS zzz} %-5p[%t] %m%n 

答えて

1

のlog4j 2マニュアルは、多くの構成例があり、RollingFileAppender上の部分が要件に合致する例があります。また、あなたに興味があるかもしれ何

http://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="warn" name="MyApp" packages=""> 
    <Appenders> 
    <RollingFile name="RollingFile" fileName="logs/projectlogs/test.log" 
       filePattern="logs/projectlogs/$${date:yyyy-MM}/test-%d{yyyy-MM-dd-HH}-%i.log.gz"> 
     <PatternLayout> 
     <Pattern>%d %-5p[%t] %c{1.} %m%n</Pattern> 
     </PatternLayout> 
     <Policies> 
     <TimeBasedTriggeringPolicy interval="5" modulate="true"/> 
     <SizeBasedTriggeringPolicy size="100 MB"/> 
     </Policies> 
    </RollingFile> 
    </Appenders> 
    <Loggers> 
    <Root level="trace"> 
     <AppenderRef ref="RollingFile"/> 
    </Root> 
    </Loggers> 
</Configuration> 

はつまりLog4j- 2.5では、ロールオーバー時に削除されるファイルをユーザーがより詳細に制御できる削除アクションが導入されました。 http://logging.apache.org/log4j/2.x/manual/appenders.html#CustomDeleteOnRollover

+1

元の設定では、Log4j 1.xを使用しました。 Log4j 2の機能を利用するには、アプリケーションをコード化する必要はありません。代わりに、log4j-1を含めてください。2-api jar。これにより、Log4j 1.2 APIへの呼び出しをLog4j 2にルーティングできるようになります。 – rgoers

+1

@Remko Popma:このソリューションは私のために機能しました。ありがとうございます。 –

+0

@Remko Popma:単なる質問ですが、log4j1.xを使ってこの機能を実装できますか? –

0

何を達成したいの(SizeAndTimeBasedFNATP)「ポリシーを命名とトリガサイズと時間ベースのファイル」と呼ばれ、logbackパッケージの最新リリースに記載されていますこれは現時点では1.1.7ですが、(1.1.2が遅いにもかかわらず)あまり多くの非同期プロセスがなくても予測可能な結果が得られるので、私が使用する1.1.2も同様です。

logbackパッケージがlog4jのと同様の方法で動作しますが、あなたの場合には、以下の1(TEST_%dの{YYYYMMDD} .logの%Iの点に注意してくださいように見えるかもしれXMLベースの設定ファイル(logback.xml)を使用しています。 - - あなたのパターンです)。

残念ながらはインデックスを日付内に制限することはできません。したがって、各日付に5つのチャンクしか持たせることはできません。各日付は、日付ごとに独立したログチャンクインデックスで完全にログに記録されます。ただし、ログ・フォルダーの合計サイズ(1.1.7)と(ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicyを使用して)ログ・フォルダーの合計サイズを制限できます。

また、少なくとも10Mbのチャンクサイズを使用することをお勧めします(100Kbは小さめです)、より大きなチャンクとして、一般的に言えば、ログlib(より少ないCPU消費)によって維持しやすくなります。実行後

<?xml version="1.0" ?> 
<configuration> 
    <property name="log.folder" value="C:/logs/projectlogs"/> 
<!-- UNCOMMENT BELOW SECTION IF CONSOLE IS REQUIRED --> 
<!-- 
    <appender class="ch.qos.logback.core.ConsoleAppender" name="CONSOLE"> 
    <encoder> 
     <pattern>[%p] [%thread] %logger - %msg%n</pattern> 
    </encoder> 
    </appender> 
--> 
    <appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILE"> 
    <File>${log.folder}/test.log</File> 
    <Append>true</Append> 
    <encoder> 
     <pattern>%d{ISO8601} [%thread] %-5level %logger{35} - %msg%n</pattern> 
    </encoder> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <fileNamePattern>${log.folder}/test_%d{yyyyMMdd}.log.%i</fileNamePattern> 
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
       <maxFileSize>100KB</maxFileSize> 
      </timeBasedFileNamingAndTriggeringPolicy> 
      <!-- keep 30 days' worth of history --> 
      <maxHistory>30</maxHistory> 
      <!-- up to 10 GB max --> 
      <totalSizeCap>10GB</totalSizeCap> 
      <MaxFileSize>100KB</MaxFileSize> 
    </rollingPolicy> 
    </appender> 

    <root> 
    <level value="INFO"/> 
    <appender-ref ref="FILE"/> 
    </root> 

    <logger name="Main"> 
    <level value="DEBUG" /> 
    </logger>  

    <logger name="ch.qos"> 
    <level value="WARN"/> 
    </logger> 
</configuration> 

テストのJavaアプリケーション

package logtester; 
import org.apache.log4j.Logger; 
public class LogTester { 
    public static void main(String[] args) { 
     Logger logger = Logger.getLogger("Main"); 
     for(int i = 1; i<=20000; i++) 
      logger.info("Log message "+i); 
    } 
} 

フォルダ構造:

13,230 test.log 
102,929 test_20160430.log.0 
103,168 test_20160430.log.1 
102,816 test_20160430.log.10 
102,816 test_20160430.log.11 
103,168 test_20160430.log.2 
103,168 test_20160430.log.3 
103,168 test_20160430.log.4 
103,168 test_20160430.log.5 
102,815 test_20160430.log.6 
102,816 test_20160430.log.7 
102,816 test_20160430.log.8 
102,816 test_20160430.log.9 

それがお役に立てば幸いです。

関連する問題