Spring Bootでlogback-spring.xmlを使ったロガーの設定




Spring Bootでのロガー設定方法

Spring Bootではspring-boot-starter-webを使用するとLogbackがデフォルトで使えるようになります。

Logbackの設定は慣れると簡単にロガーの設定ができます。Spring Bootを使ってるならこれで事足りると思います。

設定方法

logback-spring.xmlはapplication.propertiesがあるresources配下に作成します。中身はこんな感じです。上から順番に説明して行きます。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!-- デフォルト設定読み込み -->
    <include resource="org/springframework/boot/logging/logback/base.xml" />

    <property name="logFileName" value="app" />

    <!--ローカル環境用設定 -->
    <springProfile name="default">
        <property name="logFilePath" value="./" />
    </springProfile>

    <!--develop環境用設定 -->
    <springProfile name="develop">
        <property name="logFilePath" value="/var/log/velop/" />
    </springProfile>

    <!--production環境用設定 -->
    <springProfile name="production">
        <property name="logFilePath" value="/var/log/production/" />
    </springProfile>

    <!-- コンソール出力 -->
    <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="APPLIATION_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>
            <charset>UTF-8</charset>
            <pattern>%d{yyyy/MM/dd HH:mm:ss} %-5level [%thread] - %msg%n</pattern>
        </encoder>
    </appender>

    <!--rootログレベルと使用出力ルール -->
    <root level="INFO">
        <appender-ref ref="APPLIATION_LOG" />
    </root>
</configuration>

デフォルト設定

インクルードしているのはコンソールとファイル用のアペンダーになります。詳細はこちら

<!-- デフォルト設定読み込み -->
<include resource="org/springframework/boot/logging/logback/base.xml" />

環境別変数の設定

環境別に変数を定義することができます。springProfileは起動時に指定しているapplication-develop.propertiesやapplication-production.propertiesの環境名を指定できます。

<!--ローカル環境用設定 -->
<springProfile name="default">
    <property name="logFilePath" value="./" />
</springProfile>

<!--develop環境用設定 -->
<springProfile name="develop">
    <property name="logFilePath" value="/var/log/develop/" />
</springProfile>

コンソールアペンダー

コンソールにログを出力するときのフォーマットを設定できます。

 <!-- コンソール出力 -->
<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>

ファイル書き出し

ファイル書き出しのフォーマットとローテションの設定ができます。ローテーションは日毎にzipで圧縮もできるし、保存期間も簡単に設定できるので便利です。下記では保存期間を3日で設定しています。

<!-- アプリケーションログのファイル書き出し -->
<appender name="APPLIATION_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>
        <charset>UTF-8</charset>
        <pattern>%d{yyyy/MM/dd HH:mm:ss} %-5level [%thread] - %msg%n</pattern>
    </encoder>
</appender>

ログレベル設定

最後に出力するログレベルと使用するアペンダーを指定すれば完了です。

<!--rootログレベルと使用出力ルール -->
<root level="INFO">
    <appender-ref ref="APPLIATION_LOG" />
</root>

おすすめ書籍

Springの概要からインストール方法、各コア機能(Security, Sessionなど)の解説が体系的にまとめられています。2018年に出版されたばかりなので情報も新しいです。これからSpring Bootでアプリケーション開発をしたい方の最初に読む一冊としておすすめします。対象は初心者だけでなく上級者まで幅広く学べるので是非読んでみてください!

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です