Skip to content

Commit

Permalink
✨ log request and response details
Browse files Browse the repository at this point in the history
  • Loading branch information
artamonovkirill committed Sep 23, 2023
1 parent 69fd52b commit 12682bd
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 7 deletions.
5 changes: 5 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,11 @@
<version>${jackson-databind.version}</version>
</dependency>

<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
Expand Down
12 changes: 9 additions & 3 deletions src/main/groovy/com/tomtom/http/RequestBuilder.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
}

Expand Down
16 changes: 12 additions & 4 deletions src/main/groovy/com/tomtom/http/ResponseParser.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, List<String>>,
Expand All @@ -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
Expand All @@ -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 [:]
}

}

0 comments on commit 12682bd

Please sign in to comment.