如何在 Java 应用程序的 Vertx 框架中记录请求和响应

Posted

技术标签:

【中文标题】如何在 Java 应用程序的 Vertx 框架中记录请求和响应【英文标题】:How to log request and response in Vertx framework for Java Application 【发布时间】:2021-12-29 13:17:50 【问题描述】:

我试过这个https://github.com/zalando/logbook 但它只适用于基于弹簧的应用程序。有人知道如何在 Vertx 框架中记录请求和响应吗?

【问题讨论】:

Vert.x Web 模块可以log requests 但不能响应。 【参考方案1】:

将以下处理程序添加到您的路由器并记录您的需求

private fun loggingHandler(routingContext: RoutingContext) 
    routingContext.addHeadersEndHandler 
      // log context.request() and context.response() as required
    
    routingContext.next()

【讨论】:

【参考方案2】:

这是一个有点宽泛的问题,但让我试着分几个部分来回答。

首先,我假设您正在寻找一个记录器库。 Vertx 提供了类似的东西,但它已被弃用,他们鼓励您使用第三方库,如 Log4J 或 SLF4J。要使用它,您需要像这样将它作为依赖项添加到您的pom.xml(假设您使用 maven):

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.32</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.32</version>
</dependency>

之后,您可以像这样实例化一个记录器:

final static Logger logger = LoggerFactory.getLogger("loggerName");

并像这样使用它:

logger.info("Logging this message!")

至于记录 HTTP 请求的位置,您必须到处理 HTTP 路由并定义和注册处理程序的位置。作为响应,这是您发送的内容,因此您可以轻松地(使用记录器)在您创建它的代码的位置进行记录。这就是您处理 HTTP 请求日志记录的方式:

final Handler<RoutingContext> loggingHandler = routingContext -> 
    // here you access properties of routingContext.request() and log what you want

router.route().handler(loggingHandler);

至于响应,您可以在代码中的某处创建如下响应:HttpServerResponse response = context.response().setStatusCode(status);,然后使用response.end(content) 发送它。在调用.end() 之前,您可以通过访问response 的属性来记录您需要的内容。

【讨论】:

以上是关于如何在 Java 应用程序的 Vertx 框架中记录请求和响应的主要内容,如果未能解决你的问题,请参考以下文章

es4x 使用nodejs 开发vertx 应用框架试用

Vertx和Jersey集成使用

java vertx写出较为简单的便于阅读的顺序串行异步代码

vertx处理程序如何工作?

Java 应用程序中 io.vertx.core.impl.EventLoopContext 中的内存泄漏

vertx框架文章的翻译和个人批注