Java での Log4j/Logback を使用したロギングとデバッグ

このブログの内容が役立つ、またはインスピレーションを与えると思われる場合は、私のブログをフォローして、最新の技術記事やチュートリアルをできるだけ早く入手してください。同時に、コメント欄にメッセージを残して、ご意見やご提案を共有していただくこともできます。ご協力ありがとうございます!

【Log4jの使い方】

1. はじめに

1. Log4j とは何ですか?

Log4j は、開発者がアプリケーション内で発生するイベントを記録できるようにする Java ログ フレームワークです。ログ メッセージをさまざまな宛先 (ファイル、コンソール、データベース、syslog など) に送信し、さまざまな形式でフォーマットするための非常に柔軟な構成オプションがあります。Log4j は Apache Software Foundation のオープン ソース プロジェクトで、いくつかのバージョンがリリースされており、最新バージョンは Log4j 2.x です。

2. なぜ Log4j を使用するのですか?

ロギングは、開発者がアプリケーションの問題を特定するのに役立つデバッグおよびトラブルシューティングの重要な方法です。Log4j を使用すると、開発者にとってロギングが容易になり、柔軟な構成オプションや出力先、さまざまなレベルのロギング メッセージなどの多くの機能が提供されます。さらに、Log4j は、豊富なコミュニティ サポートと広範なドキュメントを備えた、広く使用されているログ フレームワークです。

3. Log4j のコアコンポーネント

Log4j のコア コンポーネントには、Logger、Appender、Layout、Filter が含まれます。

  • ロガー: ロガー。ログ メッセージを記録するために使用されます。
  • アペンダー: ファイル、コンソール、データベース、syslog などのさまざまなターゲットにログ メッセージを送信するために使用されます。
  • レイアウト: ログ メッセージのフォーマットに使用されます。
  • フィルター: ログ メッセージをフィルターし、特定の条件を満たすメッセージのみをアペンダーに送信するために使用されます。

2、Log4jをインストールする

1. Log4jをダウンロードする

Log4j の最新バージョンは、公式 Web サイト [ http://logging.apache.org/log4j/2.x/ダウンロードできます。

2. Log4j を Java プロジェクトに追加します

ダウンロードした Log4j ライブラリを Java プロジェクトのクラスパスに追加します。Log4j ライブラリをプロジェクトの lib フォルダーに追加することも、プロジェクトの Maven 依存関係に追加することもできます。

3. Log4j を構成する

Log4j に動作を指示する構成ファイルを作成する必要があります。Log4j は、XML、JSON、プロパティ ファイルなど、さまざまな形式の構成ファイルを使用できます。この例では、XML 形式の構成ファイルを使用します。

以下は、ログ メッセージをコンソールに送信する単純な Log4j XML 構成ファイルの例です。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
    </Console>
  </Appenders>
  <Loggers>
    <Root level="debug">
      <AppenderRef ref="Console" />
    </Root>
  </Loggers>
</Configuration>

構成ファイル内の​status​プロパティは、 Log4j の内部ログ レベルを設定するために使用され、Log4j 自体のログのログ レベルを指定します。この値は、、、、、、、、または​DEBUG​です。デフォルト値は です​INFO​​WARN​​ERROR​​FATAL​​ERROR​

要素は、​Appenders​ログ メッセージをさまざまなターゲットに送信するために使用されるアペンダーを指定します。ここでは、​Console​アペンダーは。​PatternLayout​ログ メッセージのフォーマット方法は、で指定されます。 は​%d​日付と時刻を表し、 はスレッド名を​%t​表し、​%-5level​はログ レベルを表し、 はロガー名を​%logger{36}​表し、​%msg​はメッセージ自体を表します, 改行​%n​を示します。

この要素は​Loggers​ロガーの構成を指定します。ここでは​Root​という名前の。属性は​level​ロガーのログレベルを指定します。ここでは に設定されています​debug​この要素は、​AppenderRef​ロガーを​Console​Appender。これは、このロガーによって記録されたすべてのメッセージがコンソールに送信されることを意味します。

他のアペンダーの追加、ログ レベルの変更など、必要に応じて構成ファイル内のパラメーターを変更できます。

3. Java での Log4j の使用

1. ロガーを作成する

メッセージをログに記録するには、Logger オブジェクトを使用する必要があります。アプリケーション コンポーネントごとに異なるロガーを作成できます。Logger クラスは Log4j の最も重要なクラスの 1 つであり、Logger オブジェクトは LoggerFactory クラスを使用して作成できます。

次の例は、Java アプリケーションでロガーを作成する方法を示しています。

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class MyClass {
    private static final Logger logger = LogManager.getLogger(MyClass.class);
    // ...
}

2. ロガーの設定

アプリケーションでは、異なる Logger オブジェクトに対して異なるロギング レベル、アペンダーなどを構成する必要がある場合があります。デフォルトでは、すべてのロガーは親ロガーの構成を継承します。

次の例は、XML 構成ファイルで特定のロガーに異なるログ レベルを設定する方法を示しています。

<Loggers>
  <Logger name="com.mycompany.myapp.MyClass" level="debug" />
</Loggers>

上記の例では、Logger 要素の name 属性は Logger オブジェクトの完全なクラス名を指定し、level 属性は Logger オブジェクトのログ レベルを指定します。

3. メッセージのログ記録

ログ メッセージを記録するには、 、 、 、など​debug()​Logger オブジェクトのさまざまなメソッドを使用できます​info()​​warn()​​error()​

次の例は、Logger オブジェクトを使用してログ メッセージを記録する方法を示しています。

logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warn message");
logger.error("This is an error message");

4. さまざまなレベルのメッセージにログ レベルを設定する

Logger オブジェクトのさまざまなメソッドのログ レベルを設定して、どのメッセージをログに記録するかを制御できます。デフォルトでは、Logger オブジェクトはすべてのレベルのメッセージをログに記録します。ロギング レベルは、Logger オブジェクトのコンストラクターで指定できます。たとえば、レベル​INFO​以上、次のコードを使用できます。

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class MyClass {
    private static final Logger logger = LogManager.getLogger(MyClass.class);
    
    public MyClass() {
        logger.setLevel(Level.INFO);
    }
}

上記のコードでは、Logger オブジェクトのログ レベルが に設定されています​INFO​これは、Logger オブジェクトがレベル​INFO​​WARN​​ERROR​、および​FATAL​レベルのメッセージのみをログに記録することを意味します。

5. ログメッセージのフォーマット

Log4j を使用すると、ログ メッセージを記録するときにプレースホルダーを使用してメッセージをフォーマットできます。たとえば、メッセージに変数を含めて、Logger メソッドを呼び出すときにそれらの変数の値を Logger メソッドに渡すことができます。フォーマットされたメッセージを使用した例を次に示します。

logger.info("User {} logged in from {}", username, ipAddress);

上記の例では、​{}​はプレースホルダーであり、ログ メッセージを記録するときに Logger メソッドに渡されるパラメーター値に置き換えられます。たとえば、 の​username​​john​の値は である場合、記録されるログ メッセージは次のようになります。​ipAddress​​192.168.1.100​

User john logged in from 192.168.1.100

6. 例外ログ

例外ログの記録は、問題のデバッグとトラブルシューティングの鍵となります。Log4j を使用すると、例外とそのスタック トレースをログに記録できます。Logger オブジェクトのさまざまなメソッド (​error()​メソッド。

次の例は、Logger オブジェクトを使用して例外をログに記録する方法を示しています。

try {
    // some code that throws an exception
} catch (Exception e) {
    logger.error("An error occurred", e);
}

上記の例では、Logger オブジェクトの​error()​メソッドに2 番目のパラメーターとして例外オブジェクトが渡されます。これにより、Logger オブジェクトは例外とそのスタック トレースをログに記録します。

7. Log4j2 を使用して非同期ログを実装する

Log4j2 は非同期ログをサポートしています。これは、ログ メッセージを別のスレッドで非同期に記録できることを意味します。非同期ログにより、特に同時実行性の高いアプリケーションでパフォーマンスが向上します。

非同期ロギングを有効にするには、非同期アペンダーを使用する必要があります​AsyncAppender​非同期アペンダーを使用する例を次に示します。

<Appenders>
  <Console name="Console" target="SYSTEM_OUT">
    <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
  </Console>
  <Async name="Async">
    <AppenderRef ref="Console" />
  </Async>
</Appenders>
<Loggers>
  <Root level="debug">
    <AppenderRef ref="Async" />
  </Root>
</Loggers>

上記の例では、​Async​アペンダーをメッセージをコンソールに非同期的に記録します。

8. Log4j2 を使用したログのスクロール

ログ ファイルは時間の経過とともに非常に大きくなる可能性があります。これを回避するには、ローリング ファイル アペンダを使用するように Log4j2 を構成します。これにより、ログ ファイルが特定の基準 (日付、サイズ、時間間隔など) に基づいてローリングされます。

日付ごとにロールするファイル アペンダーを使用した例を次に示します。

<Appenders>
  <RollingFile name="RollingFile" fileName="logs/app.log"
               filePattern="logs/app-%d{MM-dd-yyyy}.log">
    <PatternLayout>
      <Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</Pattern>
    </PatternLayout>
    <Policies>
      <TimeBasedTriggeringPolicy />
    </Policies>
  </RollingFile>
</Appenders>
<Loggers>
  <Root level="debug">
    <AppenderRef ref="RollingFile" />
  </Root>
</Loggers>

上の例では、 ​RollingFile​Appender を​app.log​という名前のファイルにログを記録します。プロパティは​filePattern​ログ ファイル名の形式を定義します。上の例では、ログ ファイル名は日付に基づいてロールされ、日付の​MM-dd-yyyy​形式。この要素は、​<TimeBasedTriggeringPolicy>​ Log4j2 に毎日の終わりにログ ファイルをロールオーバーするように指示します。

4 番目に、Log4j の高度な使用法

1. アペンダーを使用してログ メッセージをさまざまな宛先に送信する

Log4j を使用すると、ログ メッセージをコンソール、ファイル、データベースなどのさまざまな宛先に送信できます。Log4j は、要件に応じて選択できるさまざまなタイプのアペンダーを提供します。

以下は、複数のアペンダーを使用してログ メッセージをコンソールとファイルに送信する例です。

<Appenders>
  <Console name="Console" target="SYSTEM_OUT">
    <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
  </Console>
  <RollingFile name="RollingFile" fileName="logs/app.log"
               filePattern="logs/app-%d{MM-dd-yyyy}.log">
    <PatternLayout>
      <Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</Pattern>
    </PatternLayout>
    <Policies>
      <TimeBasedTriggeringPolicy />
    </Policies>
  </RollingFile>
</Appenders>
<Loggers>
  <Root level="debug">
    <AppenderRef ref="Console" />
    <AppenderRef ref="RollingFile" />
  </Root>
</Loggers>

上記の例では、​Console​アペンダーはログ メッセージをコンソールに出力し、​RollingFile​アペンダーはログ メッセージをファイルに記録します。この要素は、​<AppenderRef>​ Appender を Logger オブジェクトに追加するために使用されます。

2. レイアウトを使用してログ メッセージをフォーマットする

Log4j は、ログ メッセージをフォーマットするためのさまざまなレイアウトを提供します。デフォルトでは、Log4j は を使用し​SimpleLayout​、次の形式でログ メッセージを記録します。

级别 - 消息内容

​PatternLayout​カスタム ログ メッセージ形式を使用した例を次に示します。

<Appenders>
  <Console name="Console" target="SYSTEM_OUT">
    <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
  </Console>
</Appenders>
<Loggers>
  <Root level="debug">
    <AppenderRef ref="Console" />
  </Root>
</Loggers>

上の例では、カスタム ログ メッセージ形式が​PatternLayout​指定されて。​%d​日付と時刻​%t​示しますを示します。​%-5level​レベルを示し、レベル名を左揃えで最大 5 文字で示します。 ロガー名を​%logger{36}​示します最大 36 文字​%msg​。メッセージの内容を示し、改行文字​%n​を表します。

3. フィルタを使用してログ メッセージをフィルタリングする

Log4j では、フィルターを使用してログ メッセージをフィルターできます。フィルターは、特定の条件に基づいてログ メッセージをフィルター処理するために使用されるカスタム クラスです。たとえば、フィルターを使用して、特定のログ メッセージのみをログに記録したり、特定のロガーからのログ メッセージをフィルターしたりできます。

以下は、以下を使用してログ メッセージを​ThresholdFilter​フィルタリングする。

<Appenders>
  <Console name="Console" target="SYSTEM_OUT">
    <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
    <Filters>
      <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
    </Filters>
  </Console>
</Appenders>
<Loggers>
  <Root level="debug">
    <AppenderRef ref="Console" />
  </Root>
</Loggers>

上の例では​ThresholdFilter​​info​レベル以上のログ メッセージのみが記録されることを指定します。このプロパティは​onMatch​一致した場合の動作 (この例ではログ メッセージを受け入れる) を指定し、​onMismatch​プロパティ不一致の場合の動作 (この例ではログ メッセージを拒否する) を指定します。

4. ロガー継承メカニズムを使用して構成を簡素化する

Log4j では、Logger 継承メカニズムを使用して構成を簡素化できます。ロガー継承メカニズムは、親ロガーのすべての Appender、Filter、および Level プロパティをすべての子ロガーに適用できます。

次に、Logger 継承メカニズムを使用した例を示します。

<Loggers>
  <Logger name="com.example" level="debug" additivity="false">
    <AppenderRef ref="Console" />
  </Logger>
  <Root level="info">
    <AppenderRef ref="Console" />
  </Root>
</Loggers>

上記の例では、​Logger​要素は​com.example​Logger という名前を指定し、そのレベルを に設定します​debug​プロパティ​additivity​は に設定されます​false​。これは、ログ メッセージが親ロガーに渡されないことを意味します。この要素は​Root​デフォルト レベルを に設定し​info​​Console​それにアペンダーを追加します。​com.example​Logger はLogger を継承するため​Root​​Console​Appender。

5. ベストプラクティス

1. アプリケーションコンポーネントごとに異なるロガーを使用する

アプリケーション コンポーネントごとに異なるロガーを使用すると、アプリケーション内で発生するイベントをより深く理解できるようになります。たとえば、コントローラー、サービス、データ アクセス層などのコンポーネントごとに異なるロガーを使用できます。

2. ログレベルが正しく設定されていることを確認します。

ログ レベルが適切に構成されていることを確認すると、不要なログ メッセージが削減され、問題を迅速に診断できます。開発中に、ログ レベルを​debug​または​trace​より詳細なログ メッセージに設定できます。運用環境では、ログ レベルを​info​1。

3. MDC を使用してリクエストまたはスレッドのコンテキストを追跡する

MDC (マップされた診断コンテキスト) を使用して、リクエストまたはスレッドのコンテキスト情報をログ メッセージに追加します。たとえば、リクエスト ID と IP アドレスを HTTP リクエストに追加し、この情報を各ログ メッセージに記録できます。これは、特定のリクエストのログ メッセージを追跡したり、ログ ファイル内の特定の IP アドレスに対するすべてのリクエストを検索したりするのに役立ちます。

MDC を使用した例を次に示します。

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;

public class MyServlet extends HttpServlet {
  private static final Logger LOGGER = LogManager.getLogger(MyServlet.class);

  protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    // Add request ID and IP address to MDC
    ThreadContext.put("requestId", request.getId());
    ThreadContext.put("ipAddress", request.getRemoteAddr());

    try {
      // Servlet logic
      ...
    } catch (Exception e) {
      LOGGER.error("Error processing request", e);
    } finally {
      // Remove request ID and IP address from MDC
      ThreadContext.remove("requestId");
      ThreadContext.remove("ipAddress");
    }
  }
}

上記の例では、​ThreadContext​クラスはMDC 属性の追加と削除に使用されます。各リクエストの処理中に、リクエスト ID と IP アドレスが MDC に追加されます。例外的なケースでは、エラー メッセージは、例外スタック トレースが添付されたエラー レベルのログ メッセージとして記録されます。リクエストの処理が完了すると、リクエスト ID と IP アドレスが MDC から削除されます。

4. ログファイルを定期的にクリーンアップする

ログ ファイルを定期的にクリーンアップすると、ログ ファイルが大きくなりすぎてディスク領域を占有することを防ぐことができます。Log4j の​RollingFileAppender​または を​SizeBasedTriggeringPolicy​ログ ファイルのサイズを制御し、古いログ ファイルを定期的に削除できます。

​RollingFileAppender​を使用した例を次に示します。

<Appenders>
  <RollingFile name="RollingFile" fileName="logs/app.log"
    filePattern="logs/app-%d{yyyy-MM-dd}-%i.log.gz">
    <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
    <Policies>
      <SizeBasedTriggeringPolicy size="10MB" />
    </Policies>
    <DefaultRolloverStrategy max="10" />
  </RollingFile>
</Appenders>
<Loggers>
  <Root level="info">
    <AppenderRef ref="RollingFile" />
  </Root>
</Loggers>

上記の例では、​RollingFile​アペンダーは​fileName​属性を使用してログ ファイルの名前を指定し、​filePattern​属性使用してローリング ファイルの名前パターンを指定します。​SizeBasedTriggeringPolicy​ログ ファイルのサイズが 10MB に達したときに、新しいログ ファイルが作成されるように指定します ​DefaultRolloverStrategy​最大 10 個の古いログ ファイルを保持するように指定します ​Root​Loggerでは、​RollingFile​ログ メッセージをファイルに書き込むために、Appender が Appender 参照に追加されます。

6. まとめ

この記事では、Java アプリケーションのログ記録とデバッグに Log4j を使用する方法を紹介しました。最初に、Logger、Level、Appender などの概念を含む Log4j の基本を紹介しました。次に、Java アプリケーションで Log4j を構成し、さまざまなレベルでメッセージをログに記録する方法について説明しました。次に、アペンダー、レイアウト、フィルター、ロガー継承メカニズムを含む Log4j の高度な使用方法と、アプリケーション コンポーネントごとに異なるロガーを使用すること、ログ レベルが正しく構成されていることを確認すること、MDC を使用してリクエストを追跡することなどのベスト プラクティスを紹介しました。またはスレッド コンテキスト。定期的にログ ファイルをクリーンアップします。

Log4j と Log4j2 には多くの類似点がありますが、両者の間にはいくつかの違いがあります。Log4j2 は、より優れたパフォーマンスと機能を提供する Log4j のアップグレード バージョンです。Java アプリケーションでログインが必要な場合は、Log4j2 をお勧めします。


【ログバックの使い方】

1. ログバックの概要

1. ログバックの概要

Logback は Java ベースのロギング フレームワークであり、Log4j フレームワークの後継であり、Log4j よりも高いパフォーマンスとより多くの機能を提供します。Logback のコア コンポーネントには、ロガー、アペンダー、レイアウト、フィルターなどが含まれており、コンソール、ファイル、データベースなどのさまざまなターゲットにログ メッセージを記録するのに役立ちます。

2. ログバックの利点

ログバックには次のような利点があります。

高いパフォーマンス: Logback は非同期ログとバッファー テクノロジーを使用しており、アプリケーションのパフォーマンスに影響を与えることなく大量のログ メッセージを記録できます。

柔軟性: Logback は、機能を簡単に拡張するための豊富な構成オプションとプラグインを提供します。

使いやすさ: Logback には優れたドキュメントと例があり、簡単に手に取って使用できます。

2、ログバックを使用する

2.1 ログバックのインストール

Logback を使用する前に、プロジェクトのクラスパスに Logback を追加する必要があります。これを行うには 2 つの方法があります。

  • Logback JAR ファイルをプロジェクトのクラスパスに手動で追加します。
  • Logback の依存関係を管理するには、Maven や Gradle などの依存関係管理ツールを使用します。

2.2 Logback設定ファイルの追加

Logback を使用してログを記録するには、Logback 構成ファイルを作成する必要があります。デフォルトでは、Logback はクラスパスのルートで logback.xml または logback.groovy という名前のファイルを検索します。

以下は、単純な logback.xml ファイルの例です。

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

この構成ファイルは、標準出力ストリームにログを記録する「STDOUT」という名前のコンソール アペンダを定義します。さらに、「root」という名前のロガーが、レベルが「debug」に設定され、アペンダーが「STDOUT」に設定されて定義されています。

単純な logback.groovy 構成ファイルの例を次に示します。

import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.core.ConsoleAppender

def encoder = new PatternLayoutEncoder()
encoder.pattern = "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"
encoder.context = context
encoder.start()

def consoleAppender = new ConsoleAppender()
consoleAppender.name = "console"
consoleAppender.encoder = encoder
consoleAppender.context = context
consoleAppender.start()

root(INFO, ['console'])

2.3 ロガーの設定

Java でのログ記録に Logback を使用するには、Logger オブジェクトを作成し、それを使用してメッセージをログに記録する必要があります。

Logback を使用してメッセージを記録する単純な Java クラスを次に示します。

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

public class MyClass {
    private static final Logger LOGGER = LoggerFactory.getLogger(MyClass.class);

    public void doSomething() {
        LOGGER.debug("Doing something");
        LOGGER.info("Something done");
    }
}

このクラスは、「LOGGER」という名前の Logger オブジェクトを定義し、それをクラスのメソッドで使用してデバッグ情報を記録します。

2.4 ロガーレベルの使用

Logback には、TRACE、DEBUG、INFO、WARN、ERROR、OFF などの複数のログ レベルが用意されています。ロガーのレベルが特定のレベルに設定されている場合、そのレベル以下のメッセージはすべてログに記録されません。

Logback でロガー レベルを設定する方法の例を次に示します。

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

この例では、ロガー レベルは「デバッグ」に設定されています。これは、DEBUG レベル以上のログ メッセージのみが記録されることを意味します。

2.5 ローリング ファイル アペンダの使用

RollingFileAppender は Logback のアペンダーで、事前に設定された時間またはファイル サイズに従ってログ ファイルをローリングできるため、ログ ファイルが無限に大きくなるのを防ぎます。

以下は、「rolling」という名前の RollingFileAppender を定義する単純な logback.xml ファイルの例です。

<configuration>
    <appender name="rolling" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/myapp.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/myapp.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="debug">
        <appender-ref ref="rolling" />
    </root>
</configuration>

この例では、「ローリング」アペンダーはログ ファイル名を定義し、「logs/myapp.log」という名前のファイルにログを書き込みます。RollingFileAppender は、TimeBasedRollingPolicy を使用してログ ファイルのローリング ポリシーを定義し、毎日新しいログ ファイルを生成し、最大 7 つのログ ファイルを保持します。最後に、アペンダーは以前と同じエンコーダーとログ レベルの構成を使用します。

2.6 コンソール出力の構成

Logback は、ファイルへのログ記録に加えて、ログ メッセージをコンソールに出力することもできます。

以下は、「stdout」と呼ばれる ConsoleAppender を定義する単純な logback.xml ファイルの例です。

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

この例では、「stdout」アペンダーは、以前と同じエンコーダーとログレベル構成を使用するコンソール出力アペンダーを定義します。

2.7 MDC (マップされた診断コンテキスト) の使用

MDC は Logback の重要な機能であり、リクエスト処理全体を通じてコン​​テキスト情報をログ システムに渡すことができます。この情報は、特に複雑な分散環境でリクエストがどのように処理されるかをより深く理解するのに役立ちます。

以下は、Logback で MDC を使用する方法を示す単純な Java クラスの例です。

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

public class MyService {
    private static final Logger logger = LoggerFactory.getLogger(MyService.class);

    public void doSomething() {
        MDC.put("userId", "1234");
        logger.debug("Starting doSomething()");
        // do some work
        logger.debug("Finished doSomething()");
        MDC.remove("userId");
    }
}

この例では、まず「userId」という値を MDC に追加します。次に、ロガーを使用してデバッグ情報を記録しました。最後に、MDC の「userId」値を削除しました。

Logback で MDC を使用するには、logback.xml ファイルに次のコードを追加する必要があります。

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

この例では、ログ パターンで「[%X{userId}]」を使用しています。これは、Logback が MDC から「userId」という名前の値を取得し、それをログ メッセージに含めようとすることを意味します。

2.8 Logback を使用したフィルタ

Logback は、どのメッセージをログに記録し、どのメッセージを破棄するかを制御するのに役立つフィルタ メカニズムも提供します。

以下は、「stdout」という名前の ConsoleAppender を定義し、「myFilter」という名前のフィルターをアタッチする単純な logback.xml ファイルの例です。

<configuration>
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="com.example.MyFilter" />
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="debug">
        <appender-ref ref="stdout" />
    </root>
</configuration>

この例では、「myFilter」というフィルターを定義し、ConsoleAppender に追加します。これは、ログ メッセージが ConsoleAppender に配信されると、まず処理のために myFilter に渡されることを意味します。フィルターで FilterReply 列挙値を返すことによってメッセージの処理方法を制御できる場合。可能な値には、ACCEPT、DENY、NEUTRAL が含まれます。

以下は、フィルターの実装方法を示す単純な Java クラスの例です。

import ch.qos.logback.classic.spi.LoggingEvent;
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.FilterReply;

public class MyFilter extends Filter<LoggingEvent> {

    @Override
    public FilterReply decide(LoggingEvent event) {
        if (event.getLevel().levelInt < Level.ERROR.levelInt) {
            return FilterReply.DENY;
        } else {
            return FilterReply.ACCEPT;
        }
    }
}

この例では、「myFilter」というフィルターを作成し、その Decide() メソッドをオーバーライドします。この例では、ERROR 以上のレベルのメッセージのログのみが許可され、ERROR 未満のメッセージはすべて破棄されます。

3. まとめ

この記事では、ロガー、ログ レベル、アペンダー、MDC、フィルター、RollingFileAppender など、Logback ログ フレームワークのいくつかの重要な機能を紹介しました。また、Java アプリケーションでのログ記録とデバッグに Logback を使用する方法も示しました。ここでは Logback の基本的な機能をいくつか紹介するだけですが、これらの機能は Logback を使い始めるのに十分であり、特定のニーズに合わせて簡単に拡張できます。Logback の高度な機能について詳しく知りたい場合は、公式ドキュメントまたはその他のリソースを確認することをお勧めします。

Logback は、Java アプリケーションのログ記録とデバッグを簡単に行うのに役立つ強力で柔軟なログ フレームワークです。このチュートリアルが Logback の使用方法を学び、開発プロセスを容易にするのに役立つことを願っています。

おすすめ

転載: blog.csdn.net/bairo007/article/details/132675688