diff options
Diffstat (limited to 'reference/logging-filter/logging-filter-base/src/main/java/org/onap/logging/filter/base/MDCSetup.java')
-rw-r--r-- | reference/logging-filter/logging-filter-base/src/main/java/org/onap/logging/filter/base/MDCSetup.java | 175 |
1 files changed, 98 insertions, 77 deletions
diff --git a/reference/logging-filter/logging-filter-base/src/main/java/org/onap/logging/filter/base/MDCSetup.java b/reference/logging-filter/logging-filter-base/src/main/java/org/onap/logging/filter/base/MDCSetup.java index a900968..a90f053 100644 --- a/reference/logging-filter/logging-filter-base/src/main/java/org/onap/logging/filter/base/MDCSetup.java +++ b/reference/logging-filter/logging-filter-base/src/main/java/org/onap/logging/filter/base/MDCSetup.java @@ -25,6 +25,7 @@ import java.net.UnknownHostException; import java.time.ZoneOffset; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeFormatterBuilder; import java.time.temporal.ChronoUnit; import java.util.Base64; import java.util.UUID; @@ -39,25 +40,70 @@ import org.slf4j.MDC; public class MDCSetup { protected static Logger logger = LoggerFactory.getLogger(MDCSetup.class); - private static final String INSTANCE_UUID = UUID.randomUUID().toString(); + protected static final String serverIpAddressOverride = "SERVER_IP_ADDRESS_OVERRIDE"; + protected static final String serverFqdnOverride = "SERVER_FQDN_OVERRIDE"; + protected static final String INSTANT_PRECISION_OVERRIDE = "INSTANT_PRECISION_OVERRIDE"; + protected static final String checkHeaderLogPattern = "Checking {} header to determine the value of {}"; + protected String serverFqdn; + protected String serverIpAddress; + protected String[] prioritizedIdHeadersNames; + protected String[] prioritizedPartnerHeadersNames; + protected DateTimeFormatter iso8601Formatter; + + public MDCSetup() { + this.prioritizedIdHeadersNames = + new String[] {ONAPLogConstants.Headers.REQUEST_ID, Constants.HttpHeaders.HEADER_REQUEST_ID, + Constants.HttpHeaders.TRANSACTION_ID, Constants.HttpHeaders.ECOMP_REQUEST_ID}; + this.prioritizedPartnerHeadersNames = + new String[] {HttpHeaders.AUTHORIZATION, ONAPLogConstants.Headers.PARTNER_NAME, HttpHeaders.USER_AGENT}; + initServerFqdnandIp(); + this.iso8601Formatter = createFormatter(); + } + + protected String getCurrentTimeStamp() { + return ZonedDateTime.now(ZoneOffset.UTC).format(iso8601Formatter); + } + + protected DateTimeFormatter createFormatter() { + DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder(); + try { + Integer instantPrecision = Integer.valueOf(System.getProperty(INSTANT_PRECISION_OVERRIDE, "3")); + builder.appendInstant(instantPrecision); + } catch (NumberFormatException nfe) { + logger.warn("instant precision could not be read and thus won't be set, the default will be used instead." + + nfe.getMessage()); + } + return builder.toFormatter(); + } public void setInstanceID() { MDC.put(ONAPLogConstants.MDCs.INSTANCE_UUID, INSTANCE_UUID); } - public void setServerFQDN() { - String serverFQDN = ""; - InetAddress addr = null; - try { - addr = InetAddress.getLocalHost(); - serverFQDN = addr.getCanonicalHostName(); - MDC.put(ONAPLogConstants.MDCs.SERVER_IP_ADDRESS, addr.getHostAddress()); - } catch (UnknownHostException e) { - logger.warn("Cannot Resolve Host Name"); - serverFQDN = ""; + protected void initServerFqdnandIp() { + serverFqdn = getProperty(serverFqdnOverride); + serverIpAddress = getProperty(serverIpAddressOverride); + + if (serverIpAddress.equals(Constants.DefaultValues.UNKNOWN) + || serverFqdn.equals(Constants.DefaultValues.UNKNOWN)) { + try { + InetAddress addr = InetAddress.getLocalHost(); + if (serverFqdn.equals(Constants.DefaultValues.UNKNOWN)) { + serverFqdn = addr.getCanonicalHostName(); + } + if (serverIpAddress.equals(Constants.DefaultValues.UNKNOWN)) { + serverIpAddress = addr.getHostAddress(); + } + } catch (UnknownHostException e) { + logger.trace("Cannot Resolve Host Name." + e.getMessage()); + } } - MDC.put(ONAPLogConstants.MDCs.SERVER_FQDN, serverFQDN); + } + + public void setServerFQDN() { + MDC.put(ONAPLogConstants.MDCs.SERVER_FQDN, serverFqdn); + MDC.put(ONAPLogConstants.MDCs.SERVER_IP_ADDRESS, serverIpAddress); } public void setClientIPAddress(HttpServletRequest httpServletRequest) { @@ -76,35 +122,18 @@ public class MDCSetup { } public void setEntryTimeStamp() { - MDC.put(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP, - ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT)); + MDC.put(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP, getCurrentTimeStamp()); } public String getRequestId(SimpleMap headers) { - logger.trace("Checking X-ONAP-RequestID header for requestId."); - String requestId = headers.get(ONAPLogConstants.Headers.REQUEST_ID); - if (requestId != null && !requestId.isEmpty()) { - return requestId; - } - - logger.trace("No valid X-ONAP-RequestID header value. Checking X-RequestID header for requestId."); - requestId = headers.get(Constants.HttpHeaders.HEADER_REQUEST_ID); - if (requestId != null && !requestId.isEmpty()) { - return requestId; - } - - logger.trace("No valid X-RequestID header value. Checking X-TransactionID header for requestId."); - requestId = headers.get(Constants.HttpHeaders.TRANSACTION_ID); - if (requestId != null && !requestId.isEmpty()) { - return requestId; - } - - logger.trace("No valid X-TransactionID header value. Checking X-ECOMP-RequestID header for requestId."); - requestId = headers.get(Constants.HttpHeaders.ECOMP_REQUEST_ID); - if (requestId != null && !requestId.isEmpty()) { - return requestId; + String requestId = null; + for (String headerName : this.prioritizedIdHeadersNames) { + logger.trace(checkHeaderLogPattern, headerName, ONAPLogConstants.Headers.REQUEST_ID); + requestId = headers.get(headerName); + if (requestId != null && !requestId.isEmpty()) { + return requestId; + } } - logger.trace("No valid requestId headers. Generating requestId: {}", requestId); return UUID.randomUUID().toString(); } @@ -113,13 +142,7 @@ public class MDCSetup { String invocationId = headers.get(ONAPLogConstants.Headers.INVOCATION_ID); if (invocationId == null || invocationId.isEmpty()) invocationId = UUID.randomUUID().toString(); - MDC.put(ONAPLogConstants.MDCs.INVOCATION_ID, invocationId); - } - - public void setInvocationIdFromMDC() { - String invocationId = MDC.get(ONAPLogConstants.MDCs.INVOCATION_ID); - if (invocationId == null || invocationId.isEmpty()) - invocationId = UUID.randomUUID().toString(); + MDC.put(ONAPLogConstants.MDCs.SERVER_INVOCATION_ID, invocationId); MDC.put(ONAPLogConstants.MDCs.INVOCATION_ID, invocationId); } @@ -129,40 +152,26 @@ public class MDCSetup { } protected String getMDCPartnerName(SimpleMap headers) { - String checkHeaderLogPattern = "Checking {} header to determine the value of {}"; - - logger.trace(checkHeaderLogPattern, HttpHeaders.AUTHORIZATION, ONAPLogConstants.MDCs.PARTNER_NAME); - String partnerName = getBasicAuthUserName(headers); - if (partnerName != null && !partnerName.isEmpty()) { - return partnerName; - } - - logger.trace(checkHeaderLogPattern, ONAPLogConstants.Headers.PARTNER_NAME, ONAPLogConstants.MDCs.PARTNER_NAME); - partnerName = headers.get(ONAPLogConstants.Headers.PARTNER_NAME); - if (partnerName != null && !partnerName.isEmpty()) { - return partnerName; - } - - logger.trace(checkHeaderLogPattern, HttpHeaders.USER_AGENT, ONAPLogConstants.MDCs.PARTNER_NAME); - partnerName = headers.get(HttpHeaders.USER_AGENT); - if (partnerName != null && !partnerName.isEmpty()) { - return partnerName; - } + String partnerName = null; + for (String headerName : prioritizedPartnerHeadersNames) { + logger.trace(checkHeaderLogPattern, headerName, ONAPLogConstants.MDCs.PARTNER_NAME); + if (headerName.equals(HttpHeaders.AUTHORIZATION)) { + partnerName = getBasicAuthUserName(headers); + } else { + partnerName = headers.get(headerName); + } + if (partnerName != null && !partnerName.isEmpty()) { + return partnerName; + } - logger.trace(checkHeaderLogPattern, Constants.HttpHeaders.CLIENT_ID, ONAPLogConstants.MDCs.PARTNER_NAME); - partnerName = headers.get(Constants.HttpHeaders.CLIENT_ID); - if (partnerName != null && !partnerName.isEmpty()) { - return partnerName; } - logger.trace("{} value could not be determined, defaulting partnerName to {}.", ONAPLogConstants.MDCs.PARTNER_NAME, Constants.DefaultValues.UNKNOWN); return Constants.DefaultValues.UNKNOWN; } public void setLogTimestamp() { - MDC.put(ONAPLogConstants.MDCs.LOG_TIMESTAMP, - ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT)); + MDC.put(ONAPLogConstants.MDCs.LOG_TIMESTAMP, getCurrentTimeStamp()); } public void setElapsedTime() { @@ -176,7 +185,7 @@ public class MDCSetup { MDC.put(ONAPLogConstants.MDCs.ELAPSED_TIME, Long.toString(ChronoUnit.MILLIS.between(entryTimestamp, endTimestamp))); } catch (Exception e) { - logger.warn("Unable to calculate elapsed time due to error: {}", e.getMessage()); + logger.trace("Unable to calculate elapsed time due to error: {}", e.getMessage()); } } @@ -191,7 +200,7 @@ public class MDCSetup { MDC.put(ONAPLogConstants.MDCs.ELAPSED_TIME, Long.toString(ChronoUnit.MILLIS.between(entryTimestamp, endTimestamp))); } catch (Exception e) { - logger.warn("Unable to calculate elapsed time due to error: {}", e.getMessage()); + logger.trace("Unable to calculate elapsed time due to error: {}", e.getMessage()); } } @@ -202,7 +211,7 @@ public class MDCSetup { } else { statusCode = ONAPLogConstants.ResponseStatus.ERROR.toString(); setErrorCode(code); - setErrorDesc(code); + setErrorDescription(code); } MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, statusCode); } @@ -212,7 +221,7 @@ public class MDCSetup { } public void clearClientMDCs() { - MDC.remove(ONAPLogConstants.MDCs.INVOCATION_ID); + MDC.remove(ONAPLogConstants.MDCs.CLIENT_INVOCATION_ID); MDC.remove(ONAPLogConstants.MDCs.RESPONSE_DESCRIPTION); MDC.remove(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE); MDC.remove(ONAPLogConstants.MDCs.RESPONSE_CODE); @@ -224,15 +233,27 @@ public class MDCSetup { } public void setResponseDescription(int statusCode) { - MDC.put(ONAPLogConstants.MDCs.RESPONSE_DESCRIPTION, Response.Status.fromStatusCode(statusCode).toString()); + MDC.put(ONAPLogConstants.MDCs.RESPONSE_DESCRIPTION, extractDescription(statusCode)); + } + + private String extractDescription(int statusCode) { + Response.Status responseStatus = Response.Status.fromStatusCode(statusCode); + if (responseStatus != null) { + return responseStatus.toString(); + } + CustomResponseStatus customResponseStatus = CustomResponseStatus.fromStatusCode(statusCode); + if (customResponseStatus != null) { + return customResponseStatus.toString(); + } + return String.format("Unknown description for response code %d.", statusCode); } public void setErrorCode(int statusCode) { MDC.put(ONAPLogConstants.MDCs.ERROR_CODE, String.valueOf(statusCode)); } - public void setErrorDesc(int statusCode) { - MDC.put(ONAPLogConstants.MDCs.ERROR_DESC, Response.Status.fromStatusCode(statusCode).toString()); + public void setErrorDescription(int statusCode) { + MDC.put(ONAPLogConstants.MDCs.ERROR_DESC, extractDescription(statusCode)); } public String getProperty(String property) { |