Skip to content

Commit

Permalink
279 bug: resolve metadata and nested objects written as stringified o…
Browse files Browse the repository at this point in the history
…bjects
  • Loading branch information
FrozenSync committed Jan 13, 2025
1 parent e706a2e commit 5de90ef
Showing 1 changed file with 15 additions and 9 deletions.
24 changes: 15 additions & 9 deletions src/main/java/nl/rijksoverheid/mev/logging/LoggingFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
import java.util.function.UnaryOperator;
import java.util.stream.Collectors;

import static net.logstash.logback.marker.Markers.append;

public class LoggingFilter extends OncePerRequestFilter implements ApplicationContextAware {

/**
Expand Down Expand Up @@ -81,10 +83,10 @@ private void afterRequest(HttpServletRequest request, HttpServletResponse respon
var event = processEvent();
var http = processHttp(request, response);
var url = processUrl(request);

processMetadata(request, response);
var metadata = processMetadata(request, response);

log.info(
append("metadata", metadata),
"HTTP {} {} responded {} in {} ms",
http.requestMethod, url.path, http.responseStatusCode, event.duration.toMillis()
);
Expand Down Expand Up @@ -136,7 +138,7 @@ private Url processUrl(HttpServletRequest request) {
private record Url(String path) {
}

private void processMetadata(HttpServletRequest request, HttpServletResponse response) {
private Map<String, Object> processMetadata(HttpServletRequest request, HttpServletResponse response) {
var loggingContext = applicationContext.getBean(LoggingContext.class);

var requestHeaders = headersToMap(Collections.list(request.getHeaderNames()), request::getHeader);
Expand All @@ -156,18 +158,22 @@ private void processMetadata(HttpServletRequest request, HttpServletResponse res

var metadata = new HashMap<String, Object>();
metadata.put("pl_ids", loggingContext.getPlIds());
metadata.put("response.body", responseBodyAsJsonString);
metadata.put("response.headers", responseHeaders);
metadata.put("request.body", requestBodyAsJsonString);
metadata.put("request.headers", requestHeaders);

try {
var metadataAsJsonString = objectMapper.writeValueAsString(metadata);
MDC.put("metadata", metadataAsJsonString);
var responseBody = objectMapper.readValue(responseBodyAsJsonString, Object.class);
var requestBody = objectMapper.readValue(requestBodyAsJsonString, Object.class);

metadata.put("response.body", responseBody);
metadata.put("request.body", requestBody);
} catch (JsonProcessingException e) {
log.error("Failed to serialize headers to JSON; fallback to writing headers as Java object", e);
MDC.put("metadata", metadata.toString());
log.error("Failed to serialize HTTP body to JSON; fallback to writing headers as Java object", e);
metadata.put("response.body", responseBodyAsJsonString);
metadata.put("request.body", requestBodyAsJsonString);
}

return metadata;
}

private Map<String, String> headersToMap(Collection<String> headerNames, UnaryOperator<String> headerValueResolver) {
Expand Down

0 comments on commit 5de90ef

Please sign in to comment.