1.11. 他のロギング API を使用する


Red Hat build of Quarkus は、すべてのロギング要件に関して JBoss Logging ライブラリーに依存しています。

Apache Commons Logging、Log4j、SLF4J などの他のロギングライブラリーに依存するライブラリーを使用すると想定します。その場合は、それらを依存関係から除外し、いずれかの JBoss Logging アダプターを使用します。

ネイティブ実行可能ファイルのコンパイル時に以下のような問題が発生する可能性があるため、これはネイティブ実行可能ファイルをビルドする場合に特に重要です。

Caused by java.lang.ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl

ロギングの実装はネイティブ実行可能ファイルに含まれませんが、JBoss Logging アダプターを使用してこの問題を解決できます。

次の章で説明するように、これらのアダプターは一般的なオープンソースのロギングコンポーネントで利用できます。

1.11.1. アプリケーションにロギングアダプターを追加する

jboss-logging 以外の各ロギング API では、以下を実行します。

  1. ロギングアダプターライブラリーを追加して、これらの API 経由でログに記録されたメッセージが JBoss Log Manager バックエンドにルーティングされるようにします。

    注記

    この手順は、エクステンションが自動的に処理する Quarkus エクステンションの依存関係であるライブラリーには不要です。

    • Apache Commons Logging:

      • Maven を使用:

        <dependency>
            <groupId>org.jboss.logging</groupId>
            <artifactId>commons-logging-jboss-logging</artifactId>
        </dependency>
      • Gradle を使用する場合:

        implementation("org.jboss.logging:commons-logging-jboss-logging")
    • Log4j:

      • Maven を使用:

        <dependency>
            <groupId>org.jboss.logmanager</groupId>
            <artifactId>log4j-jboss-logmanager</artifactId>
        </dependency>
      • Gradle を使用する場合:

        implementation("org.jboss.logmanager:log4j-jboss-logmanager")
    • Log4j 2:

      • Maven を使用:

        <dependency>
            <groupId>org.jboss.logmanager</groupId>
            <artifactId>log4j2-jboss-logmanager</artifactId>
        </dependency>
      • Gradle を使用する場合:

        implementation("org.jboss.logmanager:log4j2-jboss-logmanager")
        注記

        log4j2-jboss-logmanager ライブラリーには、Log4j をロギング実装として使用するために必要なものがすべて含まれているため、Log4j の依存関係を含めないでください。

    • SLF4J:

      • Maven を使用:

        <dependency>
            <groupId>org.jboss.slf4j</groupId>
            <artifactId>slf4j-jboss-logmanager</artifactId>
        </dependency>
      • Gradle を使用する場合:

        implementation("org.jboss.slf4j:slf4j-jboss-logmanager")
  2. 追加されたライブラリーが生成したログが、他の Quarkus ログと同じフォーマットになっているか確認します。

1.11.2. MDC を使用してコンテキストログ情報を追加する

Quarkus は、リアクティブコアとの互換性を高めるために、ロギングの Mapped Diagnostic Context (MDC) をオーバーライドします。

1.11.2.1. MDC データの追加と読み取り

MDC にデータを追加し、ログ出力で展開するには以下を実行します。

  1. MDC クラスを使用してデータを設定します。

    1. import org.jboss.logmanager.MDC; を追加します。
    2. 以下の例に示すように、MDC.put(…​) を設定します。

      JBoss Logging と io.quarkus.logging.Log の例

      package me.sample;
      
      import io.quarkus.logging.Log;
      import jakarta.ws.rs.GET;
      import jakarta.ws.rs.Path;
      import org.jboss.logmanager.MDC;
      
      import java.util.UUID;
      
      @Path("/hello/jboss")
      public class GreetingResourceJbossLogging {
      
          @GET
          @Path("/test")
          public String greeting() {
              MDC.put("request.id", UUID.randomUUID().toString());
              MDC.put("request.path", "/hello/test");
              Log.info("request received");
              return "hello world!";
          }
      }

  2. %X{mdc-key} を使用するようにログフォーマットを設定します。

    quarkus.log.console.format=%d{HH:mm:ss} %-5p request.id=%X{request.id} request.path=%X{request.path} [%c{2.}] (%t) %s%n

    結果のメッセージには MDC データが含まれます。

    08:48:13 INFO request.id=c37a3a36-b7f6-4492-83a1-de41dbc26fe2 request.path=/hello/test [me.sa.GreetingResourceJbossLogging] (executor-thread-1) request received

1.11.2.2. MDC とサポートされるロギング API

ロギング API に応じて、次のいずれかの MDC クラスを使用します。

  • Log4j 1 - org.apache.log4j.MDC.put(key, value)
  • Log4j 2 - org.apache.logging.log4j.ThreadContext.put(key, value)
  • SLF4J - org.slf4j.MDC.put(key, value)

1.11.2.3. MDC の伝播

Quarkus では、MDC プロバイダーにはリアクティブコンテキストを処理するための特定の実装があるため、MDC データはリアクティブな非同期処理中に確実に伝播されます。

その結果、さまざまなシナリオで引き続き MDC データにアクセスできます。

  • 非同期呼び出しの後、たとえば REST クライアントが Uni を返した場合。
  • org.eclipse.microprofile.context.ManagedExecutor. に送信されたコード内にて。
  • vertx.executeBlocking() で実行されるコード内にて。
注記

該当する場合、MDC データは 複製されたコンテキスト に保存されます。これは、単一のタスクまたはリクエストを処理するための分離されたコンテキストです。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.