今回は、log4j2の設定を、ymlファイル・xmlファイルそれぞれについて、一定サイズ毎にローテーションするように設定変更してみたので、そのサンプルプログラムを共有する。
前提条件
下記記事の実装が完了していること。
サンプルプログラムの内容
log4j2.ymlを利用した場合の、今回のサンプルプログラムの構成は以下の通り。
なお、上記の赤枠は、前提条件のプログラムから変更したプログラムとなる。
今回変更した「log4j2.yml」の内容は以下の通りで、RollingFileタグ・SizeBasedTriggeringPolicyタグを利用して、ファイルサイズ:2KB毎にログローテーションする設定になっていることが確認できる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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」と同等の内容が設定されている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <?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タグを利用すればよい。