在 quarkus Resteasy 中记录 HTTP 请求和响应

问题描述 投票:0回答:3

我在使用 Quarkus 中的 REST 客户端(使用 org.eclipse.microprofile.rest.client.RestClientBuilder 构建)调用服务器上的 REST 端点时遇到问题。我非常想通过将 HTTP 请求和响应写入日志来调试服务,这样我就可以看到实际发送到服务器的内容。然而,我一直未能找到针对该特定问题的指南。 我设法构建了一个日志过滤器,但只记录了 URL 和实体 toString 值,这与发送的 HTTP 请求和响应完全不同。 请帮助我找到记录实际 HTTP 请求和响应的解决方案。

httprequest quarkus quarkus-rest-client
3个回答
19
投票

如果您使用 Resteasy React,您可以使用以下命令打开日志记录:

quarkus.rest-client.logging.scope=request-response
quarkus.rest-client.logging.body-limit=1024
quarkus.log.category."org.jboss.resteasy.reactive.client.logging".level=DEBUG

18
投票

您可以尝试为所有流量启用日志记录,包括线路或仅某些组件,在日志记录配置指南中,您可以找到如何仅启用某些组件日志记录。

将其添加到您的 application.properties 中,您应该能够看到一些日志记录信息

quarkus.log.category."org.apache.http".level=DEBUG

如果您需要记录所有内容,您可以随时将 quarkus 置于调试级别 ALL,然后选择限制日志记录所需的组件,这样您就可以看到线路级别的所有跟踪。

您还可以使用此指南

启用http访问日志

祝你好运。


3
投票

检查这个:https://quarkus.io/guides/resteasy-reactive#the-jax-rs-way

只需实现该类,您就可以开始记录。像这样:

@Provider
class LoggingFilter implements ContainerRequestFilter,
    ContainerResponseFilter {

    /* Useful stuff for later development purposes.
    @Context
    UriInfo info;

    @Context
    HttpServerRequest request;
    */

    @Override
    public void filter(ContainerRequestContext requestContext) {
        Log.info(requestContext);
    }

    @Override
    public void filter(ContainerRequestContext requestContext, 
                       ContainerResponseContext responseContext) {
        Log.info(responseContext);
    }
}

然后您可以使用 UriInfo、HttpServerRequest 和 ContainerRequestContext 来获取您想要的任何数据并将其添加到您的自定义日志中。


另一种更简单的方法,可能就足够了:

将这些配置添加到您的 application.properties 中。

quarkus.rest-client.logging.scope=request-response
quarkus.rest-client.logging.body-limit=5000

quarkus.log.category."org.jboss.resteasy.reactive.client.logging".level=DEBUG

参考:https://quarkus.io/guides/rest-client-reactive#logging-traffic

© www.soinside.com 2019 - 2024. All rights reserved.