Open4
logback-spring.xmlとは何か?
ドキュメント
-
Logging | “How-to” Guides
- Spring Bootのログ機能の紹介。
- Logbackの拡張機能を使いたい時の手段として、
logback-spring.xml
が紹介されている。
-
Logback Extensions | Core Features
- Logbackの拡張機能の紹介
- 拡張機能を
logback-spring.xml
によって使用する方法が説明されている
-
第1章:はじめに
- Logback公式の設定リファレンス
設定方法
resources直下(application.properties
などを置くところ)に作成する
参考:Spring Bootでlogback-spring.xmlを使ったロガーの設定 - ブロックチェーンエンジニアの備忘録
記述方法について
上記参考をもとに記載の意味について整理したもの
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- デフォルトで継承したい設定の読み込み -->
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<!-- propertyタグで指定した内容は後から${name}の形で値を取り出すことができる。 -->
<!-- 出力されるログファイルの名前 -->
<property name="logFileName" value="app"/>
<!--ローカル環境用設定 -->
<springProfile name="default">
<!-- "./"で"src"ディレクトリ直下に出力される -->
<property name="logFilePath" value="./"/>
</springProfile>
<!--develop環境用設定 -->
<springProfile name="develop">
<property name="logFilePath" value="/var/log/develop/"/>
</springProfile>
<!--production環境用設定 -->
<springProfile name="production">
<property name="logFilePath" value="/var/log/production/"/>
</springProfile>
<!-- コンソール出力("classに指定されたConsoleAppenderにより設定されている。) -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<target>System.out</target>
<!-- 出力される文字列に関する設定箇所 -->
<encoder>
<charset>UTF-8</charset>
<pattern>%d{yyyy/MM/dd HH:mm:ss} %-5level [%thread] - %msg%n</pattern>
</encoder>
</appender>
<!-- アプリケーションログのファイル書き出し -->
<appender name="APPLICATION_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--ファイル名 -->
<file>${logFilePath}${logFileName}.log</file>
<!-- 保存方法のルールを設定する部分 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logFilePath}${logFileName}-%d{yyyy-MM-dd}.log.zip</fileNamePattern>
<maxHistory>3</maxHistory>
</rollingPolicy>
<!-- 出力される文字列に関する設定箇所 -->
<!-- 元のencoderの記述 -->
<!-- <encoder>-->
<!-- <charset>UTF-8</charset>-->
<!-- <pattern>%d{yyyy/MM/dd HH:mm:ss} %-5level [%thread] - %msg%n</pattern>-->
<!-- </encoder>-->
<!--この記述だけだとエラーになる-->
<!-- <encoder>-->
<!-- <pattern>%requestURL - %requestMethod - %statusCode %n</pattern>-->
<!-- </encoder>-->
<!-- Layout-accessを呼び出す必要がある? -->
<!-- <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">-->
<!-- <layout class="chapters.layouts.MySampleLayout"/>-->
<!-- <pattern>%requestURL - %requestMethod - %statusCode %n</pattern>-->
<!-- </encoder>-->
<!-- こういうこと? -->
<encoder>
<charset>UTF-8</charset>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<!--rootログレベルと使用出力ルール -->
<!-- ここに記載したレベル以上のログが出力される -->
<root level="WARN">
<!-- このappender-refタグで指定したappenderタグの内容が実際に実行される内容になる。 -->
<!-- <appender-ref ref="STDOUT"/>-->
<appender-ref ref="APPLICATION_LOG"/>
</root>
</configuration>
自分なりの記述メモ
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- ファイル内で使えるプロパティ設定 -->
<property name="logFileName" value="app"/>
<!-- springのプロパティ設定(application.yml等)の呼び出し(springPropetyタグ) -->
<springProperty name="logFilePath" source="logging.file.path"/>
<!-- コンソールへのログ出力 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<pattern>%d{yyyy/MM/dd HH:mm:ss} %-5level [%thread] - %msg%n</pattern>
</encoder>
</appender>
<!-- アプリケーションログのファイル書き出し -->
<appender name="APPLICATION_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logFilePath}${logFileName}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- !重要!:fileNamePatternに指定した%dパターン文字列により、logbackはローリングスケジュールを決定する。 -->
<fileNamePattern>${logFilePath}${logFileName}-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<charset>UTF-8</charset>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<!-- APIリクエストロガーの設定 -->
<!-- loggerタグにname属性を付与することにより指定したパッケージやクラスで発生したログを指定したappenderで出力できる -->
<logger name="com.example.Logger" level="INFO">
<appender-ref ref="APPLICATION_LOG"/>
</logger>
<!-- ルートロガーの設定 -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
RollingPolicyとは?
ログファイルを切り替える処理(Rolling
)のルールを規定する設定。
例えば、以下のようなイメージ
今日(2022/09/01)のログがapp.log
に保存されるとする。
時刻が明日(2022/09/02)の00:00:00になったタイミングで今日のログが、app-2022-09-01.log
に保存される。
そして明日(2022/09/02)のログがapp.log
に保存されるようになる。
上記のルールがあると、
- 当日のデータは必ず
app.log
に保存されている - 過去のデータは必ず
app-<過去の年月日>.log
に保存されている
という状態になり管理がしやすくなる。
TimeBasedRollingPolicyでは、fileNamePattern
に設定した日付パターンを自動で読み取ってローリングの設定をしてくれる。