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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 構造化ログを使う理由
- SLF4J ファサードとロガー
- パラメータ化ロギング
- Logback の設定