import java.util.TimeZone;\r
import java.util.UUID;\r
\r
+import javax.net.ssl.HttpsURLConnection;\r
import javax.servlet.http.HttpServletRequest;\r
import javax.validation.constraints.NotNull;\r
\r
private static final String EMPTY_MESSAGE = "";\r
\r
/** Logger delegate. */\r
- private EELFLogger mLogger;\r
+ private EELFLogger mlogger;\r
/** Automatic UUID, overrideable per adapter or per invocation. */\r
private static UUID sInstanceUUID = UUID.randomUUID();\r
+\r
/**\r
- * Constructor\r
+ * Constructor.\r
*/\r
public LoggingUtils(final EELFLogger loggerP) {\r
- this.mLogger = checkNotNull(loggerP);\r
+ this.mlogger = checkNotNull(loggerP);\r
}\r
\r
/**\r
/**\r
* Report <tt>ENTERING</tt> marker.\r
*\r
- * @param request non-null incoming request (wrapper).\r
- * @return this.\r
+ * @param request non-null incoming request (wrapper)\r
+ * @param serviceName service name\r
*/\r
public void entering(HttpServletRequest request, String serviceName) {\r
MDC.clear();\r
checkNotNull(request);\r
// Extract MDC values from standard HTTP headers.\r
- final String requestID = defaultToUUID(request.getHeader(ONAPLogConstants.Headers.REQUEST_ID));\r
- final String invocationID = defaultToUUID(request.getHeader(ONAPLogConstants.Headers.INVOCATION_ID));\r
+ final String requestId = defaultToUUID(request.getHeader(ONAPLogConstants.Headers.REQUEST_ID));\r
+ final String invocationId = defaultToUUID(request.getHeader(ONAPLogConstants.Headers.INVOCATION_ID));\r
final String partnerName = defaultToEmpty(request.getHeader(ONAPLogConstants.Headers.PARTNER_NAME));\r
\r
// Default the partner name to the user name used to login to clamp\r
if (partnerName.equalsIgnoreCase(EMPTY_MESSAGE)) {\r
- MDC.put(ONAPLogConstants.MDCs.PARTNER_NAME, new DefaultUserNameHandler().retrieveUserName(SecurityContextHolder.getContext()));\r
+ MDC.put(ONAPLogConstants.MDCs.PARTNER_NAME, new DefaultUserNameHandler()\r
+ .retrieveUserName(SecurityContextHolder.getContext()));\r
}\r
\r
// Set standard MDCs. Override this entire method if you want to set\r
MDC.put(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP,\r
ZonedDateTime.now(ZoneOffset.UTC)\r
.format(DateTimeFormatter.ISO_INSTANT));\r
- MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, requestID);\r
- MDC.put(ONAPLogConstants.MDCs.INVOCATION_ID, invocationID);\r
+ MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, requestId);\r
+ MDC.put(ONAPLogConstants.MDCs.INVOCATION_ID, invocationId);\r
MDC.put(ONAPLogConstants.MDCs.CLIENT_IP_ADDRESS, defaultToEmpty(request.getRemoteAddr()));\r
MDC.put(ONAPLogConstants.MDCs.SERVER_FQDN, defaultToEmpty(request.getServerName()));\r
MDC.put(ONAPLogConstants.MDCs.INSTANCE_UUID, defaultToEmpty(sInstanceUUID));\r
\r
// Default the service name to the requestURI, in the event that\r
// no value has been provided.\r
- if (serviceName == null ||\r
- serviceName.equalsIgnoreCase(EMPTY_MESSAGE)) {\r
+ if (serviceName == null\r
+ || serviceName.equalsIgnoreCase(EMPTY_MESSAGE)) {\r
MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, request.getRequestURI());\r
} else {\r
MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, serviceName);\r
}\r
\r
- this.mLogger.info(ONAPLogConstants.Markers.ENTRY);\r
+ this.mlogger.info(ONAPLogConstants.Markers.ENTRY);\r
}\r
\r
/**\r
* Report <tt>EXITING</tt> marker.\r
*\r
- * @return this.\r
+ * @param code response code\r
+ * @param descrption response description\r
+ * @param severity response severity\r
+ * @param status response status code\r
*/\r
public void exiting(String code, String descrption, Level severity, ONAPLogConstants.ResponseStatus status) {\r
try {\r
MDC.put(ONAPLogConstants.MDCs.RESPONSE_DESCRIPTION, defaultToEmpty(descrption));\r
MDC.put(ONAPLogConstants.MDCs.RESPONSE_SEVERITY, defaultToEmpty(severity));\r
MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, defaultToEmpty(status));\r
- this.mLogger.info(ONAPLogConstants.Markers.EXIT);\r
+ this.mlogger.info(ONAPLogConstants.Markers.EXIT);\r
}\r
finally {\r
MDC.clear();\r
* Report pending invocation with <tt>INVOKE</tt> marker,\r
* setting standard ONAP logging headers automatically.\r
*\r
- * @param builder request builder, for setting headers.\r
- * @param sync whether synchronous, nullable.\r
- * @return invocation ID to be passed with invocation.\r
+ * @param con http URL connection\r
+ * @param targetEntity target entity\r
+ * @param targetServiceName target service name\r
+ * @return invocation ID to be passed with invocation\r
*/\r
public HttpURLConnection invoke(final HttpURLConnection con, String targetEntity, String targetServiceName) {\r
- final String invocationID = UUID.randomUUID().toString();\r
+ final String invocationId = UUID.randomUUID().toString();\r
+\r
+ // Set standard HTTP headers on (southbound request) builder.\r
+ con.setRequestProperty(ONAPLogConstants.Headers.REQUEST_ID,\r
+ defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.REQUEST_ID)));\r
+ con.setRequestProperty(ONAPLogConstants.Headers.INVOCATION_ID,\r
+ invocationId);\r
+ con.setRequestProperty(ONAPLogConstants.Headers.PARTNER_NAME,\r
+ defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME)));\r
+\r
+ invokeContext(targetEntity, targetServiceName, invocationId);\r
+\r
+ // Log INVOKE*, with the invocationID as the message body.\r
+ // (We didn't really want this kind of behavior in the standard,\r
+ // but is it worse than new, single-message MDC?)\r
+ this.mlogger.info(ONAPLogConstants.Markers.INVOKE);\r
+ this.mlogger.info(ONAPLogConstants.Markers.INVOKE_SYNC + "{" + invocationId + "}");\r
+ return con;\r
+ }\r
+\r
+ /**\r
+ * Report pending invocation with <tt>INVOKE</tt> marker,\r
+ * setting standard ONAP logging headers automatically.\r
+ *\r
+ * @param con http URL connection\r
+ * @param targetEntity target entity\r
+ * @param targetServiceName target service name\r
+ * @return invocation ID to be passed with invocation\r
+ */\r
+ public HttpsURLConnection invokeHttps(final HttpsURLConnection con, String targetEntity, String targetServiceName) {\r
+ final String invocationId = UUID.randomUUID().toString();\r
\r
// Set standard HTTP headers on (southbound request) builder.\r
con.setRequestProperty(ONAPLogConstants.Headers.REQUEST_ID,\r
defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.REQUEST_ID)));\r
con.setRequestProperty(ONAPLogConstants.Headers.INVOCATION_ID,\r
- invocationID);\r
+ invocationId);\r
con.setRequestProperty(ONAPLogConstants.Headers.PARTNER_NAME,\r
defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME)));\r
\r
- invokeContext(targetEntity, targetServiceName, invocationID);\r
+ invokeContext(targetEntity, targetServiceName, invocationId);\r
\r
// Log INVOKE*, with the invocationID as the message body.\r
// (We didn't really want this kind of behavior in the standard,\r
// but is it worse than new, single-message MDC?)\r
- this.mLogger.info(ONAPLogConstants.Markers.INVOKE);\r
- this.mLogger.info(ONAPLogConstants.Markers.INVOKE_SYNC + "{"+ invocationID +"}");\r
+ this.mlogger.info(ONAPLogConstants.Markers.INVOKE);\r
+ this.mlogger.info(ONAPLogConstants.Markers.INVOKE_SYNC + "{" + invocationId + "}");\r
return con;\r
}\r
+\r
+ /**\r
+ * Invokes return context.\r
+ */\r
public void invokeReturn() {\r
// Add the Invoke-return marker and clear the needed MDC\r
- this.mLogger.info(ONAPLogConstants.Markers.INVOKE_RETURN);\r
+ this.mlogger.info(ONAPLogConstants.Markers.INVOKE_RETURN);\r
invokeReturnContext();\r
}\r
\r
/**\r
* Dependency-free nullcheck.\r
*\r
- * @param in to be checked.\r
- * @param <T> argument (and return) type.\r
- * @return input arg.\r
+ * @param in to be checked\r
+ * @param <T> argument (and return) type\r
+ * @return input arg\r
*/\r
private static <T> T checkNotNull(final T in) {\r
if (in == null) {\r
/**\r
* Dependency-free string default.\r
*\r
- * @param in to be filtered.\r
- * @return input string or null.\r
+ * @param in to be filtered\r
+ * @return input string or null\r
*/\r
private static String defaultToEmpty(final Object in) {\r
if (in == null) {\r
/**\r
* Dependency-free string default.\r
*\r
- * @param in to be filtered.\r
- * @return input string or null.\r
+ * @param in to be filtered\r
+ * @return input string or null\r
*/\r
private static String defaultToUUID(final String in) {\r
if (in == null) {\r
}\r
\r
/**\r
- * Set target related logging variables in thread local data via MDC\r
+ * Set target related logging variables in thread local data via MDC.\r
*\r
* @param targetEntity Target entity (an external/sub component, for ex. "sdc")\r
* @param targetServiceName Target service name (name of API invoked on target)\r
- * @param invocationId The invocation ID\r
+ * @param invocationID The invocation ID\r
*/\r
- private void invokeContext (String targetEntity, String targetServiceName, String invocationID) {\r
+ private void invokeContext(String targetEntity, String targetServiceName, String invocationID) {\r
MDC.put(ONAPLogConstants.MDCs.TARGET_ENTITY, defaultToEmpty(targetEntity));\r
MDC.put(ONAPLogConstants.MDCs.TARGET_SERVICE_NAME, defaultToEmpty(targetServiceName));\r
MDC.put(ONAPLogConstants.MDCs.INVOCATIONID_OUT, invocationID);\r
}\r
\r
/**\r
- * Clear target related logging variables in thread local data via MDC\r
- *\r
+ * Clear target related logging variables in thread local data via MDC.\r
*/\r
- private void invokeReturnContext () {\r
+ private void invokeReturnContext() {\r
MDC.remove(ONAPLogConstants.MDCs.TARGET_ENTITY);\r
MDC.remove(ONAPLogConstants.MDCs.TARGET_SERVICE_NAME);\r
MDC.remove(ONAPLogConstants.MDCs.INVOCATIONID_OUT);\r