8.13. 为您的可引导 JAR 启用 JSON 日志记录
您可以使用 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 功能软件包的构建号。X 和 BUILD_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>
-
流程
将 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>
在
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>
创建用于存储 Java 文件的目录:
$ mkdir -p APPLICATION_ROOT/src/main/java/com/example/logging/
其中
APPLICATION_ROOT
是包含应用的pom.xml
配置文件的目录。创建包含以下内容的 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 { }
创建包含以下内容的 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(); } }
创建一个 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)
在插件 <configuration> 元素
中添加以下
配置提取:<cli-sessions> <cli-session> <script-files> <script>scripts/logging.cli</script> </script-files> </cli-session> </cli-sessions>
本例演示了
logging.cli
CLI 脚本,该脚本修改服务器日志记录配置文件来为应用程序启用 JSON 日志记录。将应用打包为可引导 JAR。
$ mvn package
可选 : 要在 JBoss EAP 裸机平台上运行应用程序,请按照 在 JBoss EAP 裸机平台上使用可引导 JAR 中所述的步骤进行,但有以下区别:
启动应用程序:
mvn wildfly-jar:run
验证 :您可以通过在浏览器中指定以下 URL 来访问应用程序: http://127.0.0.1:8080/hello
预期的输出:您可以在应用程序控制台中查看 JSON 格式的日志,包括
com.example.logging.HelloWorldEndpoint
debug trace。
可选 : 要在 JBoss EAP OpenShift 平台上运行应用程序,请完成以下步骤:
在插件配置中添加
<cloud
/> 元素。例如:<plugins> <plugin> ... <!-- You must evolve the existing configuration with the <cloud/> element --> <configuration > ... <cloud/> </configuration> </plugin> </plugins>
重建应用程序:
$ mvn clean package
-
使用
oc login
命令登录到您的 OpenShift 实例。 在 OpenShift 中创建一个新项目。例如:
$ oc new-project bootable-jar-project
输入以下
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
部署应用程序:
$ oc new-app logging $ oc expose svc/logging
获取路由的 URL。
$ oc get route logging --template='{{ .spec.host }}'
使用上一命令返回的 URL,访问 Web 浏览器中的应用。例如:
http://ROUTE_NAME/hello
验证 : 发出以下命令来查看可用的 OpenShift pod 列表,并检查 pod 构建状态:
$ oc get pods
访问应用程序的正在运行的 pod 日志。其中
APP_POD_NAME
是正在运行的 Pod 日志记录应用的名称。$ oc logs APP_POD_NAME
预期的结果:pod 日志采用 JSON 格式,并包含
com.example.logging.HelloWorldEndpoint
debug trace。
其他资源
- 有关 JBoss EAP 日志记录功能的详情,请参考 配置指南中的 使用 JBoss EAP 进行日志记录。
- 有关在 OpenShift 上使用可引导 JAR 的详情,请参考在 JBoss EAP OpenShift 平台上使用可引导 JAR。
- 有关为项目指定 JBoss EAP JAR Maven 的详情,请参考为 可引导 JAR 服务器指定 Galleon 层。
- 有关创建 CLI 脚本的详情,请参考 CLI 脚本。