diff --git a/pom.xml b/pom.xml index 07cdb85..269b726 100644 --- a/pom.xml +++ b/pom.xml @@ -123,6 +123,11 @@ ${jackson-databind.version} + + org.apache.logging.log4j + log4j-api + ${log4j.version} + org.apache.logging.log4j log4j-core diff --git a/src/main/groovy/com/tomtom/http/RequestBuilder.groovy b/src/main/groovy/com/tomtom/http/RequestBuilder.groovy index 14fdddc..f4dfa25 100644 --- a/src/main/groovy/com/tomtom/http/RequestBuilder.groovy +++ b/src/main/groovy/com/tomtom/http/RequestBuilder.groovy @@ -25,12 +25,15 @@ import org.apache.hc.core5.http.ClassicHttpRequest import org.apache.hc.core5.http.HttpEntity import org.apache.hc.core5.http.io.entity.StringEntity import org.apache.hc.core5.http.message.BasicHeader +import org.apache.logging.log4j.LogManager +import org.apache.logging.log4j.Logger import java.util.function.Function @PackageScope class RequestBuilder { + private static Logger logger = LogManager.getLogger(HttpClient) private ObjectMapper mapper = new ObjectMapper() private String baseUrl private Map defaultHeaders @@ -43,18 +46,21 @@ class RequestBuilder { if (query) url = addQuery url, query def request = requestFor method, url + logger.info("${request.method} ${url}") if (defaultHeaders) addHeaders request, defaultHeaders - def headers = properties['headers'] as Map if (headers) addHeaders request, headers + if (request.headers) logger.info(" headers: ${request.headers}") def body = properties['body'] if (body) - if (body instanceof File) + if (body instanceof File) { + logger.info(" body: <${body} file content omitted>") addFile request, body - else { + } else { def serialized = serialize body + logger.info(" body: ${serialized}") addBody request, serialized } diff --git a/src/main/groovy/com/tomtom/http/ResponseParser.groovy b/src/main/groovy/com/tomtom/http/ResponseParser.groovy index 2293089..463ce9f 100644 --- a/src/main/groovy/com/tomtom/http/ResponseParser.groovy +++ b/src/main/groovy/com/tomtom/http/ResponseParser.groovy @@ -24,13 +24,17 @@ import groovy.transform.PackageScope import org.apache.hc.core5.http.HttpEntity import org.apache.hc.core5.http.HttpResponse import org.apache.hc.core5.http.io.entity.EntityUtils +import org.apache.logging.log4j.LogManager +import org.apache.logging.log4j.Logger @PackageScope class ResponseParser { + private static Logger logger = LogManager.getLogger(HttpClient) private mapper = new ObjectMapper() Response parse(HttpResponse response, Class type, Class subtype) { + logger.info "=> response: ${response.code}" new Response( statusCode: response.code, headers: headersOf(response) as Map>, @@ -44,13 +48,14 @@ class ResponseParser { private readEntity(HttpEntity entity, Class rawType, Class subtype) { def content = EntityUtils.toString entity + if (content) logger.info " body: ${content}" if (rawType) { def type = subtype ? typeOf(rawType, subtype) : typeOf(rawType) try { return mapper.readValue(content, type) } catch (Exception e) { - println "Failed to deserialize $content to $rawType due to $e.message, defaulting to string" + logger.warn "Failed to deserialize $content to $rawType due to $e.message, defaulting to string" } } content @@ -73,9 +78,12 @@ class ResponseParser { private static headersOf(HttpResponse response) { def headers = response.headers - headers ? headers - .groupBy { it.name } - .collectEntries { [(it.key): it.value.value] } : [:] + if (headers) { + logger.info " headers: ${response.headers}" + headers + .groupBy { it.name } + .collectEntries { [(it.key): it.value.value] } + } else [:] } }