logging - 如何在JAX-RS客户端中记录请求正文

标签 logging jax-rs servlet-filters

我需要查看带有客户端JAX-RS请求的请求主体,以验证序列化工作正确并针对Postman之类的测试客户端重用该请求。

我知道可以使用resource.addFilter(new com.sun.jersey.api.client.filter.LoggingFilter());激活Jersey的日志记录。但是,我不直接使用Jersey或RESTEasy实现,而是通过JAX-RS API进行抽象:

final WebTarget target = 
        ClientBuilder.newBuilder().build().target("http://localhost:8080");

如何在此处启用日志记录?

结果

The answer from @peeskillet + this snippet

但是,有时JAX-RS实现不会调用摘录中的close()方法(在这种情况下为org.jboss.resteasy:resteasy-client-3.0.11.FINAL)。

最佳答案

JAX-RS 2.0(看起来像您正在使用的)具有 ClientRequestFilter 。您可以使用Client甚至WebTarget注册它。通过filter方法,您可以获取实体,并进行日志记录

public class LoggingFilter implements ClientRequestFilter {
    private static final Logger LOG = Logger.getLogger(LoggingFilter.class.getName());

    @Override
    public void filter(ClientRequestContext requestContext) throws IOException {
        LOG.log(Level.INFO, requestContext.getEntity().toString());
    }
}

[...]

Client client = ClientBuilder.newClient();
client.register(new LoggingFilter());

另外,您可能会发现有趣的其他商品的 ClientRequestContext API
更新
另请参见:
  • JAX-RS 2 print JSON request,以实现完整/更好的实现。
  • 关于logging - 如何在JAX-RS客户端中记录请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30187514/

    相关文章:

    java - 使用 Tomcat 8 将外部日志记录配置的位置指定到特定的 Web 应用程序

    java - 无法将 Bean 类注入(inject) Restful Web 服务 (JAX-RS)

    java - 小服务程序 : How to get own URL pattern?

    servlets - @WebFilter 不同类型的不同初始化参数

    java - 使用 servlet 过滤器修改请求参数

    java - Log4j2 - 配置

    python - 删除 ANSI 颜色代码时打印到 STDOUT 和日志文件

    .net - 配置NLog以英文写入异常消息

    java - jax-rs Web 服务无法使用 hibernate 连接到数据库

    java - 将输出流传递给javax.ws.rs.core.ResponseBuilder