如何在 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 框架中记录请求和响应的主要内容,如果未能解决你的问题,请参考以下文章
java vertx写出较为简单的便于阅读的顺序串行异步代码