8.12. 起動可能な JAR の JSON ロギングの有効化

CLI スクリプトを使用してサーバーロギング設定を設定すると、起動可能な JAR の JSON ロギングを有効にできます。JSON ロギングを有効にすると、JSON フォーマッターを使用してログメッセージを JSON 形式で表示できます。

この手順の例では、ベアメタルプラットフォームおよび OpenShift プラットフォームで、起動可能な JAR の JSON ロギングを有効にする方法を説明します。

前提条件

  • MAVEN_PLUGIN_VERSION.X.GA.Final-redhat-00001 などの最新の Maven プラグインバージョンを確認している。MAVEN_PLUGIN_VERSION はメジャーバージョンで、X はマイクロバージョンです。/ga/org/wildfly/plugins/wildfly-jar-maven-plugin のインデックス を参照してください。
  • 3.0.X.GA-redhat-BUILD_NUMBER などの最新の Galleon 機能パックバージョンを確認している。X は JBoss EAP XP のマイナーバージョンで、BUILD_NUMBER は Galleon 機能パックのビルド番号。JBoss EAP XP 3.0.0 製品のライフサイクル中に、XBUILD_NUMBER の両方を進化できます。Index of /ga/org/jboss/eap/wildfly-galleon-pack のインデックス を参照してください。
  • Maven プロジェクトを作成し、親依存関係を設定して、アプリケーションを作成するための依存関係を追加している。起動可能な JAR Maven プロジェクトの作成 を参照してください。

    重要

    Maven プロジェクトの Maven archetype で、プロジェクト固有の groupID および artifactID を指定する必要があります。以下に例を示します。

    $ mvn archetype:generate \
    -DgroupId=com.example.logging \
    -DartifactId=logging \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DinteractiveMode=false
    cd logging
    注記

    この手順の例では、以下のプロパティーを指定します。

    • Maven プラグインバージョンの場合は、${bootable.jar.maven.plugin.version} です。
    • Galleon 機能パックバージョンの場合は、${jboss.xp.galleon.feature.pack.version} です。

    これらのプロパティーをプロジェクトで設定する必要があります。以下に例を示します。

    <properties>
        <bootable.jar.maven.plugin.version>4.0.3.Final-redhat-00001</bootable.jar.maven.plugin.version>
        <jboss.xp.galleon.feature.pack.version>3.0.0.GA-redhat-00001</jboss.xp.galleon.feature.pack.version>
    </properties>

手順

  1. BOM によって管理される JBoss Logging および Jakarta RESTful Web Services 依存関係を、プロジェクトの pom.xml ファイルの <dependencies> セクションに追加します。以下に例を示します。

    <dependencies>
        <dependency>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.spec.javax.ws.rs</groupId>
            <artifactId>jboss-jaxrs-api_2.1_spec</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
  2. 以下の内容を pom.xml ファイルの <build> 要素に追加します。最新バージョンの Maven プラグインと、org.jboss.eap:wildfly-galleon-pack Galleon 機能パックの最新バージョンを指定する必要があります。以下に例を示します。

    <plugins>
        <plugin>
            <groupId>org.wildfly.plugins</groupId>
            <artifactId>wildfly-jar-maven-plugin</artifactId>
            <version>${bootable.jar.maven.plugin.version}</version>
            <configuration>
                <feature-packs>
                    <feature-pack>
                        <location>org.jboss.eap:wildfly-galleon-pack:${jboss.xp.galleon.feature.pack.version}</location>
                    </feature-pack>
                </feature-packs>
                <layers>
                    <layer>jaxrs-server</layer>
                 </layers>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>package</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
  3. java ファイルを保存するディレクトリーを作成します。

    $ mkdir -p APPLICATION_ROOT/src/main/java/com/example/logging/

    APPLICATION_ROOT は、アプリケーションの pom.xml 設定ファイルが含まれるディレクトリーです。

  4. 以下の内容で Java ファイル RestApplication.java を作成し、ファイルを APPLICATION_ROOT/src/main/java/com/example/logging/ ディレクトリーに保存します。

    package com.example.logging;
    import javax.ws.rs.ApplicationPath;
    import javax.ws.rs.core.Application;
    
    @ApplicationPath("/")
    public class RestApplication extends Application {
    }
  5. 以下の内容で Java ファイル HelloWorldEndpoint.java を作成し、ファイルを APPLICATION_ROOT/src/main/java/com/example/logging/ ディレクトリーに保存します。

    package com.example.logging;
    
    import javax.ws.rs.Path;
    import javax.ws.rs.core.Response;
    import javax.ws.rs.GET;
    import javax.ws.rs.Produces;
    
    import org.jboss.logging.Logger;
    @Path("/hello")
    public class HelloWorldEndpoint {
    
        private static Logger log = Logger.getLogger(HelloWorldEndpoint.class.getName());
        @GET
        @Produces("text/plain")
        public Response doGet() {
            log.debug("HelloWorldEndpoint.doGet called");
            return Response.ok("Hello from XP bootable jar!").build();
        }
    }
  6. configure-oidc.cli などの CLI スクリプトを作成し、APPLICATION_ROOT/scripts ディレクトリーなどの起動可能な JAR のアクセス可能なディレクトリーに保存します。APPLICATION_ROOT は Maven プロジェクトのルートディレクトリーです。スクリプトには以下のコマンドが含まれている必要があります。

    /subsystem=logging/logger=com.example.logging:add(level=ALL)
    /subsystem=logging/json-formatter=json-formatter:add(exception-output-type=formatted, pretty-print=false, meta-data={version="1"}, key-overrides={timestamp="@timestamp"})
    /subsystem=logging/console-handler=CONSOLE:write-attribute(name=level,value=ALL)
    /subsystem=logging/console-handler=CONSOLE:write-attribute(name=named-formatter, value=json-formatter)
  7. プラグイン <configuration> 要素に以下の設定抽出を追加します。

    <cli-sessions>
            <cli-session>
            <script-files>
                <script>scripts/logging.cli</script>
            </script-files>
        </cli-session>
    </cli-sessions>

    この例は、アプリケーションの JSON ロギングを有効にするためにサーバーロギング設定ファイルを変更する logging.cli CLI スクリプトを示しています。

  8. アプリケーションを起動可能な JAR としてパッケージ化します。

    $ mvn package
  9. オプション: JBoss EAP ベアメタルプラットフォームでアプリケーションを実行するには、JBoss EAP ベアメタルプラットフォームでの起動可能な JAR の使用 にある手順に従いますが、以下の違いがあります。

    1. アプリケーションを起動します。

      mvn wildfly-jar:run
    2. 検証: ブラウザーで http://127.0.0.1:8080/hello に URL を指定すると、アプリケーションにアクセスできます。

      予期される出力: アプリケーションコンソールで com.example.logging.HelloWorldEndpoint デバッグトレースを含む JSON 形式のログを表示できます。

  10. オプション: JBoss EAP OpenShift プラットフォームでアプリケーションを実行するには、以下の手順を実行します。

    1. <cloud/> 要素をプラグイン設定に追加します。以下に例を示します。

      <plugins>
         <plugin>
             ... <!-- You must evolve the existing configuration with the <cloud/> element  -->
             <configuration >
                 ...
                 <cloud/>
              </configuration>
          </plugin>
      </plugins>
    2. アプリケーションをリビルドします。

      $ mvn clean package
    3. oc login コマンドを使用して、OpenShift インスタンスにログインします。
    4. OpenShift で新しいプロジェクトを作成します。以下に例を示します。

      $ oc new-project bootable-jar-project
    5. 以下の oc コマンドを入力してアプリケーションイメージを作成します。

      $ mkdir target/openshift && cp target/logging-bootable.jar target/openshift 1
      
      $ oc import-image ubi8/openjdk-11 --from=registry.redhat.io/ubi8/openjdk-11 --confirm
       2
      
      $ oc new-build --strategy source --binary --image-stream openjdk-11 --name logging 3
      
      $ oc start-build logging --from-dir target/openshift 4
      1
      target/openshift サブディレクトリーを作成します。パッケージ化されたアプリケーションは openshift サブディレクトリーにコピーされます。
      2
      最新の OpenJDK 11 イメージストリームタグおよびイメージ情報を OpenShift プロジェクトにインポートします。
      3
      ロギングディレクトリーおよび OpenJDK 11 イメージストリームに基づいてビルド設定を作成します。
      4
      target/openshift サブディレクトリーをバイナリー入力として使用し、アプリケーションをビルドします。
    6. アプリケーションのデプロイ:

      $ oc new-app logging
      
      $ oc expose svc/logging
    7. ルートの URL を取得します。

      $ oc get route logging --template='{{ .spec.host }}'
    8. 直前のコマンドから返された URL を使用して、Web ブラウザーでアプリケーションにアクセスします。以下に例を示します。

      http://ROUTE_NAME/hello
    9. Verfication: 以下のコマンドを実行して、利用可能な OpenShift Pod の一覧を表示し、Pod のビルドステータスを確認します。

      $ oc get pods

      アプリケーションの実行中の Pod ログにアクセスします。APP_POD_NAME は、実行中の Pod ロギングアプリケーションの名前です。

      $ oc logs APP_POD_NAME

      想定される結果: Pod ログは JSON 形式であり、com.example.logging.HelloWorldEndpoint デバッグトレースが含まれます。

関連情報