From d300062b37743f095d44a8a37e7240ac3756fdcf Mon Sep 17 00:00:00 2001 From: d044677 Date: Fri, 5 Jul 2024 13:43:05 +0200 Subject: [PATCH 1/2] Directly extract correlation-id from traceparent without creating a string array and two not necessary substrings. * Remove not(<>) predicate since it leads (very likely) to allocation. By using ?: it could be formulated without negation. * traceparent parsing without String[] and not required substring creation. * Fix debug log entry. Additional parameter was given but without corresponding format specifier. --- .../servlet/filter/CorrelationIdFilter.java | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/cf-java-logging-support-servlet/src/main/java/com/sap/hcp/cf/logging/servlet/filter/CorrelationIdFilter.java b/cf-java-logging-support-servlet/src/main/java/com/sap/hcp/cf/logging/servlet/filter/CorrelationIdFilter.java index a7772514..f55e8984 100644 --- a/cf-java-logging-support-servlet/src/main/java/com/sap/hcp/cf/logging/servlet/filter/CorrelationIdFilter.java +++ b/cf-java-logging-support-servlet/src/main/java/com/sap/hcp/cf/logging/servlet/filter/CorrelationIdFilter.java @@ -1,11 +1,8 @@ package com.sap.hcp.cf.logging.servlet.filter; -import static com.sap.hcp.cf.logging.common.customfields.CustomField.customField; import static com.sap.hcp.cf.logging.common.request.HttpHeaders.W3C_TRACEPARENT; -import static java.util.Optional.ofNullable; import java.util.UUID; -import java.util.function.Predicate; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -27,8 +24,8 @@ public class CorrelationIdFilter extends AbstractLoggingFilter { private static final Logger LOG = LoggerFactory.getLogger(CorrelationIdFilter.class); - private HttpHeader correlationHeader; - private HttpHeader traceparentHeader; + private final HttpHeader correlationHeader; + private final HttpHeader traceparentHeader; public CorrelationIdFilter() { this(HttpHeaders.CORRELATION_ID); @@ -59,29 +56,31 @@ private String determineCorrelationId(HttpServletRequest request) { correlationId = String.valueOf(UUID.randomUUID()); // add correlation-id as custom field, since it is added to MDC only // in the next step - LOG.debug("Generated new correlation-id <{}>", correlationId, customField(correlationHeader.getField(), - correlationId)); + LOG.debug("Generated new correlation-id <{}>", correlationId); } return correlationId; } - private boolean isBlankOrDefault(String value) { + private static boolean isBlankOrDefault(String value) { return value == null || value.isEmpty() || value.equals(Defaults.UNKNOWN); } private String getCorrelationIdFromTraceparent(HttpServletRequest request) { String traceparent = HttpHeaderUtilities.getHeaderValue(request, traceparentHeader); - return ofNullable(traceparent).filter(not(this::isBlankOrDefault)).map(this::parseTraceparent).orElse( - null); + return isBlankOrDefault(traceparent) ? null : parseTraceparent(traceparent); } - private Predicate not(Predicate p) { - return p.negate(); - } - - private String parseTraceparent(String value) { - String[] tokens = value.split("-"); - return tokens.length >= 2 ? tokens[1] : null; + private static String parseTraceparent(String value) { + int idx1 = value.indexOf('-'); + if (idx1 != -1) { + ++idx1; + int idx2 = value.indexOf('-', idx1); + if (idx2 != -1) { + // return string between first and second '-'. + return value.substring(idx1, idx2); + } + } + return null; } private void addCorrelationIdHeader(HttpServletResponse response, String correlationId) { From b0bcb88c4b24ab0225aa27d9f72d3f5b7f6bf84e Mon Sep 17 00:00:00 2001 From: d044677 Date: Fri, 5 Jul 2024 18:51:07 +0200 Subject: [PATCH 2/2] Restore silent logging of correlationHeader --- .../hcp/cf/logging/servlet/filter/CorrelationIdFilter.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cf-java-logging-support-servlet/src/main/java/com/sap/hcp/cf/logging/servlet/filter/CorrelationIdFilter.java b/cf-java-logging-support-servlet/src/main/java/com/sap/hcp/cf/logging/servlet/filter/CorrelationIdFilter.java index f55e8984..4853be18 100644 --- a/cf-java-logging-support-servlet/src/main/java/com/sap/hcp/cf/logging/servlet/filter/CorrelationIdFilter.java +++ b/cf-java-logging-support-servlet/src/main/java/com/sap/hcp/cf/logging/servlet/filter/CorrelationIdFilter.java @@ -1,5 +1,6 @@ package com.sap.hcp.cf.logging.servlet.filter; +import static com.sap.hcp.cf.logging.common.customfields.CustomField.customField; import static com.sap.hcp.cf.logging.common.request.HttpHeaders.W3C_TRACEPARENT; import java.util.UUID; @@ -56,7 +57,8 @@ private String determineCorrelationId(HttpServletRequest request) { correlationId = String.valueOf(UUID.randomUUID()); // add correlation-id as custom field, since it is added to MDC only // in the next step - LOG.debug("Generated new correlation-id <{}>", correlationId); + LOG.debug("Generated new correlation-id <{}>", correlationId, customField(correlationHeader.getField(), + correlationId)); } return correlationId; }