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

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

【问题讨论】:

标签: java logging request response vert.x


【解决方案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 的属性来记录您需要的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-04
      • 2017-07-28
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      相关资源
      最近更新 更多