From d3f10e4c00d4e817766d78d4c763d7877f083366 Mon Sep 17 00:00:00 2001 From: "Brian M. Long" Date: Tue, 28 Dec 2021 14:54:36 -0500 Subject: [PATCH] added trace logging for requests --- src/main/java/com/inteligr8/rs/Client.java | 3 +- .../java/com/inteligr8/rs/LoggingFilter.java | 52 +++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/inteligr8/rs/LoggingFilter.java diff --git a/src/main/java/com/inteligr8/rs/Client.java b/src/main/java/com/inteligr8/rs/Client.java index 03d93d9..901b802 100644 --- a/src/main/java/com/inteligr8/rs/Client.java +++ b/src/main/java/com/inteligr8/rs/Client.java @@ -37,7 +37,8 @@ public abstract class Client { provider.enable(DeserializationFeature.UNWRAP_ROOT_VALUE); ClientBuilder clientBuilder = ClientBuilder.newBuilder() - .register(provider); + .register(provider) + .register(new LoggingFilter()); if (authFilter == null) authFilter = this.getConfig().createAuthorizationFilter(); diff --git a/src/main/java/com/inteligr8/rs/LoggingFilter.java b/src/main/java/com/inteligr8/rs/LoggingFilter.java new file mode 100644 index 0000000..b469155 --- /dev/null +++ b/src/main/java/com/inteligr8/rs/LoggingFilter.java @@ -0,0 +1,52 @@ +package com.inteligr8.rs; + +import java.io.IOException; + +import javax.ws.rs.client.ClientRequestContext; +import javax.ws.rs.client.ClientRequestFilter; +import javax.ws.rs.client.ClientResponseContext; +import javax.ws.rs.client.ClientResponseFilter; +import javax.ws.rs.core.Form; +import javax.ws.rs.core.MediaType; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.databind.ObjectMapper; + +public class LoggingFilter implements ClientRequestFilter, ClientResponseFilter { + + private final Logger loggerRequest = LoggerFactory.getLogger("jaxrs.request"); + private final Logger loggerResponse = LoggerFactory.getLogger("jaxrs.response"); + + private final ObjectMapper om = new ObjectMapper(); + + @Override + public void filter(ClientRequestContext requestContext) throws IOException { + if (this.loggerRequest.isTraceEnabled()) { + if (MediaType.APPLICATION_JSON_TYPE.equals(requestContext.getMediaType())) { + this.loggerRequest.trace("request: {} {}: {}", requestContext.getMethod(), requestContext.getUri(), + this.om.writeValueAsString(requestContext.getEntity())); + } else if (MediaType.APPLICATION_FORM_URLENCODED_TYPE.equals(requestContext.getMediaType())) { + if (requestContext.getEntity() instanceof Form) { + this.loggerRequest.trace("request: {} {}: {}", requestContext.getMethod(), requestContext.getUri(), + ((Form)requestContext.getEntity()).asMap()); + } else { + this.loggerRequest.trace("request: {} {}: failed to output form", requestContext.getMethod(), requestContext.getUri()); + } + } else if (requestContext.getMediaType() != null) { + this.loggerRequest.trace("request '{}': {} {}", requestContext.getMediaType(), requestContext.getMethod(), requestContext.getUri()); + } else { + this.loggerRequest.trace("request: {} {}", requestContext.getMethod(), requestContext.getUri()); + } + } + } + + @Override + public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException { + if (this.loggerResponse.isTraceEnabled()) { + this.loggerResponse.warn("response: NOT YET SUPPORTED"); + } + } + +}