Spring Boot ログ出力

log4j2のファイルを一定サイズ毎にローテーションしてみた

今回は、log4j2の設定を、ymlファイル・xmlファイルそれぞれについて、一定サイズ毎にローテーションするように設定変更してみたので、そのサンプルプログラムを共有する。

前提条件

下記記事の実装が完了していること。

log4j2のファイルにymlを利用してみた前回は、log4j2のファイルにxmlファイルを利用していたが、今回はlog4j2のファイルにymlを利用してみたので、そのサンプルプロ...

サンプルプログラムの内容

log4j2.ymlを利用した場合の、今回のサンプルプログラムの構成は以下の通り。
サンプルプログラムの構成_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を利用した場合の、今回のサンプルプログラムの構成は以下の通り。
サンプルプログラムの構成_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:// (ホスト名):(ポート番号)」とアクセスし、「検索」ボタンを押下
実行結果_画面_1

2) 「次へ」リンクを押下
実行結果_画面_2

3) 下記画面に遷移
実行結果_画面_3

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

また、ログファイルの内容はそれぞれ以下の通りとなり、ログ出力時刻を確認すると、「demo_20200205_1.log」⇒「demo_20200205_2.log」⇒「demo.log」の順にログ出力されていることが確認できる。

<demo_20200205_1.logの内容>
demo_20200205_1_log

<demo_20200205_2.logの内容>
demo_20200205_2_log

<demo.logの内容>
demo_log

要点まとめ

  • 指定したファイルサイズ毎にログローテーションするには、log4j2ログ定義を行う際に、RollingFileタグ・SizeBasedTriggeringPolicyタグを利用すればよい。