4.2. 调试日志记录
Eclipse Vert.x 提供了一个内置日志记录 API。Eclipse Vert.x 的默认日志实现使用 Java JDK 提供的 java.util.logging 库。另外,Eclipse Vert.x 允许您使用不同的日志记录框架,如 Log4J (Eclipse Vert.x 支持 Log4J v1 和 v2)或 SLF4J。
4.2.1. 使用 java.util.logging为 Eclipse Vert.x 应用程序配置日志记录 复制链接链接已复制到粘贴板!
使用 java.util.logging 为 Eclipse Vert.x 应用程序配置调试日志记录:
-
在
application.properties文件中设置java.util.logging.config.file系统属性。此变量的值必须与java.util.logging配置文件的 名称对应。这样可确保LogManager在应用程序启动时初始化java.util.logging。 -
另外,还可在 Maven 项目的类路径中添加带有
vertx-default-jul-logging.properties名称的java.util.logging配置文件。Eclipse Vert.x 将使用该文件来配置应用程序启动时java.util.logging。
通过 Eclipse Vert.x,您可以使用 LogDelegateFactory 指定自定义日志记录后端,它为 Log4J、Log4J2 和 SLF4J 库提供预建的实施。与默认情况下 Java 中包含的 java.util.logging 不同,其他后端需要您将相应的库指定为应用程序的依赖项。
4.2.2. 在 Eclipse Vert.x 应用中添加日志输出。 复制链接链接已复制到粘贴板!
要向应用程序添加日志记录,请创建一个
io.vertx.core.logging.Logger:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Important日志记录后端使用不同的格式来代表参数化消息中的可替换令牌。如果您依赖参数化日志记录方法,您将无法在不更改代码的情况下切换日志后端。
4.2.3. 为应用程序指定自定义日志框架 复制链接链接已复制到粘贴板!
如果您不希望 Eclipse Vert.x 使用 java.util.logging,将 io.vertx.core.logging.Logger 配置为使用不同的日志记录框架,如 Log4J 或 SLF4J :
将
vertx.logger-delegate-factory-class-name系统属性的值设置为实现LogDelegateFactory接口的类名称。Eclipse Vert.x 为以下库提供预建的实现,其对应的预定义类名称如下:Expand 程序库 类名称 Log4Jv1io.vertx.core.logging.Log4jLogDelegateFactoryLog4Jv2io.vertx.core.logging.Log4j2LogDelegateFactorySLF4Jio.vertx.core.logging.SLF4JLogDelegateFactory使用自定义库实施日志记录时,请确保相关的
Log4J或SLF4Jjars 包含在应用程序的依赖项中。Important通过 Eclipse Vert.x 提供的 Log4J v1 委派不支持参数化消息。Log4J v2 和 SLF4J 的委派都使用
{}语法。java.util.logging委派依赖于使用{n}语法的java.text.MessageFormat。
4.2.4. 为 Eclipse Vert.x 应用程序配置 Netty 日志记录。 复制链接链接已复制到粘贴板!
Netty 是一个库,供 VertX 用于管理应用程序中异步网络通信。
Netty:
- 能够快速轻松地开发网络应用程序,如协议服务器和客户端。
- 简化和简化网络编程,如 TCP 和 UDP 套接字服务器开发。
- 提供统一的 API,用于管理阻塞和非阻塞连接。
Netty 不依赖于使用系统属性的外部日志记录配置。相反,它会基于对项目中的 Netty 类可见的日志记录库实施日志配置。Netty 会尝试按照以下顺序使用库:
-
SLF4J -
Log4J -
java.util.logging作为回退选项
您可以通过在应用程序 的主 方法的开头添加以下代码,将 io.netty.util.internal.logging.InternalLoggerFactory 设置为特定日志记录器:
// Force logging to Log4j InternalLoggerFactory.setDefaultFactory(Log4JLoggerFactory.INSTANCE);
// Force logging to Log4j
InternalLoggerFactory.setDefaultFactory(Log4JLoggerFactory.INSTANCE);
4.2.5. 访问 OpenShift 上的调试日志 复制链接链接已复制到粘贴板!
启动您的应用并与之交互,以查看 OpenShift 中的调试语句。
前提条件
-
已安装并验证
ocCLI 客户端。 - 启用调试日志记录的基于 Maven 的应用。
流程
将应用程序部署到 OpenShift:
mvn clean oc:deploy -Popenshift
$ mvn clean oc:deploy -PopenshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看日志:
使用您的应用程序获取 pod 的名称:
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 开始监视日志输出:
oc logs -f pod/MY_APP_NAME-2-aaaaa
$ oc logs -f pod/MY_APP_NAME-2-aaaaaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 保持打开日志输出的终端窗口,以便您可以观察日志输出。
与应用程序交互:
例如,以下命令基于一个示例 REST API 级别 0 应用程序,其中 debug logging 设置为在
/api/greeting方法中记录消息变量:获取应用程序的路由:
oc get routes
$ oc get routesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在应用程序的
/api/greeting端点上发出 HTTP 请求:curl $APPLICATION_ROUTE/api/greeting?name=Sarah
$ curl $APPLICATION_ROUTE/api/greeting?name=SarahCopy to Clipboard Copied! Toggle word wrap Toggle overflow
返回到包含 Pod 日志的窗口,并检查日志中的调试日志消息。
... Feb 11, 2017 10:23:42 AM io.openshift.MY_APP_NAME INFO: Greeting: Hello, Sarah ...
... Feb 11, 2017 10:23:42 AM io.openshift.MY_APP_NAME INFO: Greeting: Hello, Sarah ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
要禁用 debug 日志记录,请更新日志记录配置文件,如
src/main/resources/vertx-default-jul-logging.properties,删除您的类的日志配置并重新部署您的应用程序。