0Pricing
Java Academy · レッスン

Logback の設定

Appender、パターン、レベルです。

「Logback の設定」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。

Logbackとは

Logbackは、Log4jと同じ作者によって作られた、人気のあるSLF4Jバックエンドです。SLF4Jが記述したロギング処理を実際に実行します。

通常はsrc/main/resourcesの下に配置する、クラスパス上のlogback.xmlというファイルで設定します。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    private static final Logger log = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args) {
        log.info("Logback reads logback.xml at startup");
    }
}

3つの構成要素

Logbackの設定には、次の3つの主要な概念があります。

  • Logger:ログイベントの名前付きの発生元で、レベルを持ちます。
  • Appender:出力先(コンソール、ファイル)です。
  • Encoder/Layout:イベントをテキストにフォーマットします。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    private static final Logger log = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args) {
        log.info("logger -> appender -> encoder -> output");
    }
}

コンソールアペンダー

最も単純な設定では、すべてをコンソールに送信します。エンコーダーのパターンによって、行の形式を制御します。

このXMLはJavaコード内ではなく、logback.xmlに記述します。

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
  <root level="info">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

パターンを理解する

パターン変換語は%で始まります。

  • %dはタイムスタンプ、%levelはレベルです。
  • %loggerはロガー名、%threadはスレッドです。
  • %msgはメッセージ、%nは改行です。

%-5levelは、レベルの左側を空白で埋めて幅5にします。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    private static final Logger log = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args) {
        // Output rendered by pattern: time LEVEL logger - message
        log.info("hello");
    }
}

ルートロガーとレベル

<root>要素によって、アプリケーション全体のデフォルトレベルと、書き込み先のアペンダーを設定します。

level="info"を設定すると、INFO、WARN、ERRORが出力され、DEBUGとTRACEは抑制されます。

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
  </appender>
  <root level="warn">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

パッケージごとのレベル

<logger>要素を追加すると、パッケージのレベルを上書きできます。これにより、ライブラリのログを抑えたまま、自分のコードではDEBUGを有効にできます。

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
  </appender>
  <logger name="com.example.app" level="debug" />
  <root level="info">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

ローリングファイルアペンダー

本番環境では通常、ログが際限なく増えないように、毎日またはサイズ単位でローテーションするファイルに書き込みます。

RollingFileAppenderと時間ベースのポリシーを組み合わせると、1日につき1つのファイルを作成し、履歴を上限付きで保持できます。

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>logs/app.log</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
    <maxHistory>30</maxHistory>
  </rollingPolicy>
  <encoder>
    <pattern>%d %-5level [%thread] %logger{36} - %msg%n</pattern>
  </encoder>
</appender>

複数のアペンダーを同時に使う

ルートロガーでは複数のアペンダーを参照できるため、ログをコンソールとファイルの両方に同時に出力できます。

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder><pattern>%-5level %msg%n</pattern></encoder>
  </appender>
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>logs/app.log</file>
    <encoder><pattern>%d %-5level %msg%n</pattern></encoder>
  </appender>
  <root level="info">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
  </root>
</configuration>

MDCを出力する

リクエストIDなどのMDCコンテキストをすべての行に含めるには、パターンに%X{key}を追加します。

すると、MDCに格納した値がすべて自動的に表示されます。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;

public class Main {
    private static final Logger log = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args) {
        MDC.put("requestId", "req-1234");
        // Pattern: %X{requestId} %-5level %msg%n
        log.info("handled");
        MDC.clear();
    }
}

Additivity

デフォルトでは、ロガーのイベントは祖先のアペンダーにも送られます。これがadditivityです。

パッケージロガーに独自のアペンダーがあり、重複した出力を避けたい場合は、そのロガーにadditivity="false"を設定します。

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
  </appender>
  <logger name="com.example.audit" level="info" additivity="false">
    <appender-ref ref="STDOUT" />
  </logger>
  <root level="warn">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

自動再読み込みと変数

Logbackでは、<configuration scan="true">を使って設定を定期的に再読み込みできます。再起動せずにレベルを変更できるため便利です。

ログディレクトリなどのプロパティを、${LOG_DIR}プレースホルダーで読み込むこともできます。

<configuration scan="true" scanPeriod="30 seconds">
  <property name="LOG_DIR" value="logs" />
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${LOG_DIR}/app.log</file>
    <encoder><pattern>%d %-5level %msg%n</pattern></encoder>
  </appender>
  <root level="info"><appender-ref ref="FILE" /></root>
</configuration>

クイックチェック

Logbackの設定についての理解度を確認します。

振り返り

Logbackの設定方法を学びました。

  • 設定はlogback.xmlに記述し、ロガー、アペンダー、エンコーダーを設定します。
  • パターンによって、%d、%level、%msg、%X{}を使って行をフォーマットします。
  • RollingFileAppenderによってログをローテーションし、パッケージごとのレベルとadditivityを設定します。
  • scanを有効にして、実行中に設定を再構成できるようにします。

ロギングコースを修了しました。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    private static final Logger log = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args) {
        log.info("Logback configuration course complete");
    }
}

よくある質問

「Logback の設定」レッスンは無料ですか?

はい。「Logback の設定」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。

「Logback の設定」で何を学びますか?

Appender、パターン、レベルです。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Java Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「Logback の設定」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJava Academyレッスンでコードを書いて実行できますか?

はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 構造化ログを使う理由
  2. SLF4J ファサードとロガー
  3. パラメータ化ロギング
  4. Logback の設定
← Java Academyに戻る