搜索

8.13. 为您的可引导 JAR 启用 JSON 日志记录

download PDF

您可以使用 CLI 脚本配置服务器日志记录配置,为可引导 JAR 启用 JSON 日志记录。启用 JSON 日志记录时,您可以使用 JSON 格式查看日志消息。

此流程中的示例演示了如何在裸机平台和 OpenShift 平台上为可引导 JAR 启用 JSON 日志记录。

先决条件

  • 您已检查了最新的 Maven 插件版本,如 MAVEN_PLUGIN_VERSION.X.GA.Final-redhat-00001,其中 MAVEN_PLUGIN_VERSION 是主版本,X 是 microversion。请参阅 /ga/org/wildfly/plugins/wildfly-jar-maven-plugin 的索引
  • 您已检查了最新的 Galleon 功能软件包版本,如 4.0.X.GA-redhat-BUILD_NUMBER,其中 X 是 JBoss EAP XP 的次版本,BUILD_NUMBER 是 Galleon 功能软件包的构建号。XBUILD_NUMBER 可以在 JBoss EAP XP 4.0.0 产品生命周期中演进。请参阅 /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
    注意

    流程中显示的示例指定以下属性:

    • ${bootable.jar.maven.plugin.version} 用于 Maven 插件版本。
    • ${jboss.xp.galleon.feature.pack.version} 用于 Galleon 功能软件包版本。

    您必须在项目中设置这些属性。例如:

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

流程

  1. 将 JBoss Logging 和 Jakarta RESTful Web Services 依赖项(由 BOM 管理)添加到项目 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. 创建一个 CLI 脚本,如 logging.cli,并将它保存到可引导 JAR 的可访问目录中,如 APPLICATION_ROOT/scripts 目录,其中 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>

    本例演示了 logging.cli CLI 脚本,该脚本修改服务器日志记录配置文件来为应用程序启用 JSON 日志记录。

  8. 将应用打包为可引导 JAR。

    $ mvn package
  9. 可选 : 要在 JBoss EAP 裸机平台上运行应用程序,请按照 在 JBoss EAP 裸机平台上使用可引导 JAR 中所述的步骤进行,但有以下区别:

    1. 启动应用程序:

      mvn wildfly-jar:run
    2. 验证 :您可以通过在浏览器中指定以下 URL 来访问应用程序: http://127.0.0.1:8080/hello

      预期的输出:您可以在应用程序控制台中查看 JSON 格式的日志,包括 com.example.logging.HelloWorldEndpoint debug trace。

  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. 验证 : 发出以下命令来查看可用的 OpenShift pod 列表,并检查 pod 构建状态:

      $ oc get pods

      访问应用程序的正在运行的 pod 日志。其中 APP_POD_NAME 是正在运行的 Pod 日志记录应用的名称。

      $ oc logs APP_POD_NAME

      预期的结果:pod 日志采用 JSON 格式,并包含 com.example.logging.HelloWorldEndpoint debug trace。

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.