今回は、log4j2の設定を、ymlファイル・xmlファイルそれぞれについて、一定サイズ毎にローテーションするように設定変更してみたので、そのサンプルプログラムを共有する。
前提条件
下記記事の実装が完了していること。
サンプルプログラムの内容
log4j2.ymlを利用した場合の、今回のサンプルプログラムの構成は以下の通り。

なお、上記の赤枠は、前提条件のプログラムから変更したプログラムとなる。
今回変更した「log4j2.yml」の内容は以下の通りで、RollingFileタグ・SizeBasedTriggeringPolicyタグを利用して、ファイルサイズ:2KB毎にログローテーションする設定になっていることが確認できる。
Configuration:
status: OFF
Appenders:
# コンソールログ出力設定
Console:
name: Console
target: SYSTEM_OUT
PatternLayout:
Pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"
# ログファイル出力設定
# ファイルサイズ:2KB毎にローテーションする設定になっている
RollingFile:
name: LogFile
fileName: C:/work/logs/demo.log
filePattern: C:/work/logs/demo_%d{yyyyMMdd}_%i.log.gz
PatternLayout:
Pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"
Policies:
SizeBasedTriggeringPolicy:
size: 2KB
Loggers:
# コンソールとファイルにログ出力をするための設定
Logger:
name: com.example.demo
level: debug
additivity: false
# 複数のAppenderRefを紐付けるには先頭に「-」を付与
AppenderRef:
- ref: Console
- ref: LogFile
また、log4j2.xmlを利用した場合の、今回のサンプルプログラムの構成は以下の通り。

今回変更した「log4j2.xml」の内容は以下の通りで、「log4j2.yml」と同等の内容が設定されている。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
<Appenders>
<!-- コンソールログ出力設定 -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout>
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n
</pattern>
</PatternLayout>
</Console>
<!-- ログファイル出力設定 -->
<!-- ファイルサイズ:2KB毎にローテーションする設定になっている -->
<RollingFile name="LogFile" fileName="C:/work/logs/demo.log"
filePattern="C:/work/logs/demo_%d{yyyyMMdd}_%i.log.gz">
<PatternLayout>
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n
</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="2KB"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<!-- コンソールとファイルにログ出力をするための設定 -->
<Logger name="com.example.demo" level="debug" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="LogFile"/>
</Logger>
</Loggers>
</Configuration>その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/java/tree/master/spring-boot-log4j2-size-rotate/demo
サンプルプログラムの実行結果
「log4j2.yml」「log4j2.xml」どちらの場合も、以下のような実行結果となる。
Spring Bootアプリケーションを起動し、以下の画面操作を行うものとする。
1) 「http:// (ホスト名):(ポート番号)」とアクセスし、「検索」ボタンを押下

この場合の、ログ出力先「C:\work\logs」フォルダ内は以下の通りで、出力中のログ「demo.log」とローテーションされたログ「demo_(yyyymmdd)_(連番).log.gz」が存在することが確認できる。

また、ログファイルの内容はそれぞれ以下の通りとなり、ログ出力時刻を確認すると、「demo_20200205_1.log」⇒「demo_20200205_2.log」⇒「demo.log」の順にログ出力されていることが確認できる。
要点まとめ
- 指定したファイルサイズ毎にログローテーションするには、log4j2ログ定義を行う際に、RollingFileタグ・SizeBasedTriggeringPolicyタグを利用すればよい。








