diff options
Diffstat (limited to 'common-logging/src/main/java/org/onap/policy/common/logging/OnapLoggingUtils.java')
-rw-r--r-- | common-logging/src/main/java/org/onap/policy/common/logging/OnapLoggingUtils.java | 59 |
1 files changed, 50 insertions, 9 deletions
diff --git a/common-logging/src/main/java/org/onap/policy/common/logging/OnapLoggingUtils.java b/common-logging/src/main/java/org/onap/policy/common/logging/OnapLoggingUtils.java index 6c0879ea..91133d1a 100644 --- a/common-logging/src/main/java/org/onap/policy/common/logging/OnapLoggingUtils.java +++ b/common-logging/src/main/java/org/onap/policy/common/logging/OnapLoggingUtils.java @@ -2,7 +2,8 @@ * ============LICENSE_START======================================================= * ONAP-Logging * ================================================================================ - * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2021 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2023 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,13 +21,16 @@ package org.onap.policy.common.logging; -import javax.servlet.http.HttpServletRequest; +import com.google.re2j.Pattern; +import jakarta.servlet.http.HttpServletRequest; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; -public class OnapLoggingUtils { +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public final class OnapLoggingUtils { - private OnapLoggingUtils() { - // Private constructor to prevent subclassing - } + private static final Pattern COMMA_PAT = Pattern.compile(","); + private static final Pattern CURLS_PAT = Pattern.compile("[{][}]"); /** * Get the ONAPLoggingContext for a request. @@ -36,8 +40,8 @@ public class OnapLoggingUtils { * @return the ONAPLoggingContext */ public static OnapLoggingContext getLoggingContextForRequest(HttpServletRequest request, - OnapLoggingContext baseContext) { - OnapLoggingContext requestContext = new OnapLoggingContext(baseContext); + OnapLoggingContext baseContext) { + var requestContext = new OnapLoggingContext(baseContext); if (request.getLocalAddr() != null) { // may be null in junit tests requestContext.setServerIpAddress(request.getLocalAddr()); } @@ -45,7 +49,7 @@ public class OnapLoggingUtils { // otherwise from remote address in the request String forwarded = request.getHeader("X-Forwarded-For"); if (forwarded != null && forwarded.trim().length() > 0) { - forwarded = forwarded.trim().split(",")[0]; + forwarded = COMMA_PAT.split(forwarded.trim())[0]; requestContext.setClientIpAddress(forwarded); } else if (request.getRemoteAddr() != null) { // may be null in junit tests requestContext.setClientIpAddress(request.getRemoteAddr()); @@ -60,4 +64,41 @@ public class OnapLoggingUtils { return requestContext; } + /** + * Create message text replace {} place holder with data + * if last argument is throwable/exception, pass it as argument to logger. + * @param format message format can contains text and {} + * @param arguments output arguments + * @return the formatted message as a String + */ + public static String formatMessage(String format, Object...arguments) { + if (arguments.length <= 0 || arguments[0] == null) { + return format; + } + int index; + var builder = new StringBuilder(); + String[] token = CURLS_PAT.split(format); + for (index = 0; index < arguments.length; index++) { + if (index < token.length) { + builder.append(token[index]); + builder.append(arguments[index]); + } else { + break; + } + } + for (int index2 = index; index2 < token.length; index2++) { + builder.append(token[index2]); + } + + return builder.toString(); + } + + /** + * Check object is throwable. + * @param obj to verify + * @return true if object is throwable or false otherwise + */ + public static boolean isThrowable(Object obj) { + return (obj instanceof Throwable); + } } |