何を達成したいの(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
それがお役に立てば幸いです。
元の設定では、Log4j 1.xを使用しました。 Log4j 2の機能を利用するには、アプリケーションをコード化する必要はありません。代わりに、log4j-1を含めてください。2-api jar。これにより、Log4j 1.2 APIへの呼び出しをLog4j 2にルーティングできるようになります。 – rgoers
@Remko Popma:このソリューションは私のために機能しました。ありがとうございます。 –
@Remko Popma:単なる質問ですが、log4j1.xを使ってこの機能を実装できますか? –