--- /dev/null
+/*-\r
+ * ================================================================================\r
+ * ECOMP Portal\r
+ * ================================================================================\r
+ * Copyright (C) 2017 AT&T Intellectual Property\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ================================================================================\r
+ */\r
+package org.openecomp.portalapp.portal.logging.logic;\r
+\r
+import static com.att.eelf.configuration.Configuration.MDC_ALERT_SEVERITY;\r
+\r
+import java.text.MessageFormat;\r
+\r
+import org.slf4j.MDC;\r
+\r
+import com.att.eelf.configuration.EELFLogger;\r
+import com.att.eelf.configuration.EELFManager;\r
+\r
+import org.openecomp.portalsdk.core.logging.format.AlarmSeverityEnum;\r
+import org.openecomp.portalsdk.core.logging.format.ErrorSeverityEnum;\r
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;\r
+import org.openecomp.portalsdk.core.web.support.UserUtils;\r
+import org.openecomp.portalapp.portal.logging.format.EPAppMessagesEnum;\r
+\r
+public class EPLogUtil {\r
+\r
+ // This class has no logger. It uses loggers passed to it.\r
+ \r
+ /**\r
+ * Formats and writes a message to the error log with the class name and the\r
+ * specified parameters, using log level info, warn or error appropriate for\r
+ * the specified severity\r
+ * \r
+ * @param classLogger\r
+ * Logger for the class where the error occurred; the logger\r
+ * carries the class name.\r
+ * @param epMessageEnum\r
+ * Enum carrying alarm and error severity\r
+ * @param param\r
+ * Values used to build the message.\r
+ */\r
+ public static void logEcompError(EELFLoggerDelegate classLogger, EPAppMessagesEnum epMessageEnum, String... param) {\r
+ logEcompError(classLogger, epMessageEnum, null, param);\r
+ }\r
+ \r
+ /**\r
+ * Formats and writes a message to the error log with the class name and the\r
+ * specified parameters, using log level info, warn or error appropriate for\r
+ * the specified severity\r
+ * \r
+ * @param classLogger\r
+ * Logger for the class where the error occurred; the logger\r
+ * carries the class name.\r
+ * @param epMessageEnum\r
+ * Enum carrying alarm and error severity\r
+ * @param param\r
+ * Values used to build the message.\r
+ */\r
+ private static EELFLogger errorLogger = EELFManager.getInstance().getErrorLogger();\r
+ public static void logEcompError(EPAppMessagesEnum epMessageEnum, String... param) {\r
+ try {\r
+ AlarmSeverityEnum alarmSeverityEnum = epMessageEnum.getAlarmSeverity();\r
+ ErrorSeverityEnum errorSeverityEnum = epMessageEnum.getErrorSeverity();\r
+ \r
+ MDC.put(MDC_ALERT_SEVERITY, alarmSeverityEnum.name());\r
+ MDC.put("ErrorCode", epMessageEnum.getErrorCode());\r
+ MDC.put("ErrorDescription", epMessageEnum.getErrorDescription());\r
+ MDC.put("ClassName", EPLogUtil.class.getName());\r
+ \r
+ String resolution = EPLogUtil.formatMessage(epMessageEnum.getDetails() + " " + epMessageEnum.getResolution(), (Object[]) param);\r
+ if (errorSeverityEnum == ErrorSeverityEnum.WARN) {\r
+ errorLogger.warn(resolution);\r
+ } else if(errorSeverityEnum == ErrorSeverityEnum.INFO) {\r
+ errorLogger.info(resolution);\r
+ } else {\r
+ errorLogger.error(resolution);\r
+ }\r
+ } catch(Exception e) {\r
+ errorLogger.error("Failed to log the error code. Details: " + UserUtils.getStackTrace(e));\r
+ } finally {\r
+ MDC.remove("ErrorCode");\r
+ MDC.remove("ErrorDescription");\r
+ MDC.remove("ClassName");\r
+ MDC.remove(MDC_ALERT_SEVERITY);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Formats and writes a message to the error log with the class name,\r
+ * throwable and the specified parameters, using log level info, warn or\r
+ * error appropriate for the specified severity\r
+ * \r
+ * @param classLogger\r
+ * Logger for the class where the error occurred; the logger\r
+ * carries the class name.\r
+ * @param epMessageEnum\r
+ * Enum carrying alarm and error severity\r
+ * @param th\r
+ * Throwable; ignored if null\r
+ * @param param\r
+ * Array of Strings used to build the message.\r
+ */\r
+ @SuppressWarnings("static-access")\r
+ public static void logEcompError(EELFLoggerDelegate classLogger, EPAppMessagesEnum epMessageEnum, Throwable th,\r
+ String... param) {\r
+\r
+ AlarmSeverityEnum alarmSeverityEnum = epMessageEnum.getAlarmSeverity();\r
+ ErrorSeverityEnum errorSeverityEnum = epMessageEnum.getErrorSeverity();\r
+\r
+ MDC.put(MDC_ALERT_SEVERITY, alarmSeverityEnum.name());\r
+ MDC.put("ErrorCode", epMessageEnum.getErrorCode());\r
+ MDC.put("ErrorDescription", epMessageEnum.getErrorDescription());\r
+\r
+ final String message = EPLogUtil.formatMessage(epMessageEnum.getDetails() + " " + epMessageEnum.getResolution(),\r
+ (Object[]) param);\r
+ if (errorSeverityEnum == ErrorSeverityEnum.INFO) {\r
+ if (th == null)\r
+ classLogger.info(classLogger.errorLogger, message);\r
+ else\r
+ classLogger.info(classLogger.errorLogger, message, th);\r
+ } else if (errorSeverityEnum == ErrorSeverityEnum.WARN) {\r
+ if (th == null)\r
+ classLogger.warn(classLogger.errorLogger, message);\r
+ else\r
+ classLogger.warn(classLogger.errorLogger, message, th);\r
+ } else {\r
+ if (th == null)\r
+ classLogger.error(classLogger.errorLogger, message);\r
+ else\r
+ classLogger.error(classLogger.errorLogger, message, th);\r
+ }\r
+\r
+ // Clean up\r
+ MDC.remove(MDC_ALERT_SEVERITY);\r
+ MDC.remove("ErrorCode");\r
+ MDC.remove("ErrorDescription");\r
+ }\r
+\r
+ /**\r
+ * Builds a string using the format and parameters.\r
+ * @param message\r
+ * @param args\r
+ * @return\r
+ */\r
+ private static String formatMessage(String message, Object... args) {\r
+ StringBuilder sbFormattedMessage = new StringBuilder();\r
+ if (args != null && args.length > 0 && message != null && message != "") {\r
+ MessageFormat mf = new MessageFormat(message);\r
+ sbFormattedMessage.append(mf.format(args));\r
+ } else {\r
+ sbFormattedMessage.append(message);\r
+ }\r
+ return sbFormattedMessage.toString();\r
+ }\r
+\r
+ /**\r
+ * Builds a comma-separated string of values to document a user action.\r
+ * \r
+ * @param action\r
+ * @param activity\r
+ * @param userId\r
+ * @param affectedId\r
+ * @param comment\r
+ * @return Value suitable for writing to the audit log file.\r
+ */\r
+ public static String formatAuditLogMessage(String action, String activity, String userId, String affectedId,\r
+ String comment) {\r
+ StringBuilder auditLogMsg = new StringBuilder();\r
+ auditLogMsg.append("Click_A:[");\r
+ if (action != null && !action.equals("")) {\r
+ auditLogMsg.append(" Action: ");\r
+ auditLogMsg.append(action);\r
+ }\r
+\r
+ if (activity != null && !activity.equals("")) {\r
+ auditLogMsg.append(",Activity CD: ");\r
+ auditLogMsg.append(activity);\r
+ }\r
+\r
+ if (userId != null && !userId.equals("")) {\r
+ auditLogMsg.append(",User ID: ");\r
+ auditLogMsg.append(userId);\r
+ }\r
+\r
+ if (affectedId != null && !affectedId.equals("")) {\r
+ auditLogMsg.append(",Affected ID: ");\r
+ auditLogMsg.append(affectedId);\r
+ }\r
+\r
+ if (comment != null && !comment.equals("")) {\r
+ auditLogMsg.append(",Comment: ");\r
+ auditLogMsg.append(comment);\r
+ }\r
+ auditLogMsg.append("]");\r
+ return auditLogMsg.toString();\r
+ }\r
+\r
+ /**\r
+ * Builds a comma-separated string of values to document a user browser\r
+ * action.\r
+ * \r
+ * @param orgUserId\r
+ * @param action\r
+ * @param activity\r
+ * @param actionLink\r
+ * @param page\r
+ * @param function\r
+ * @param type\r
+ * @return Value suitable for writing to the audit log file.\r
+ */\r
+ public static String formatStoreAnalyticsAuditLogMessage(String orgUserId, String appName, String action, String activity,\r
+ String actionLink, String page, String function, String type) {\r
+ StringBuilder auditLogStoreAnalyticsMsg = new StringBuilder();\r
+ auditLogStoreAnalyticsMsg.append("Click_Analytics:[");\r
+ if (orgUserId != null && !orgUserId.equals("")) {\r
+ auditLogStoreAnalyticsMsg.append(" Organization User ID: ");\r
+ auditLogStoreAnalyticsMsg.append(orgUserId);\r
+ }\r
+ \r
+ if (appName != null && !appName.equals("")) {\r
+ auditLogStoreAnalyticsMsg.append(",AppName: ");\r
+ auditLogStoreAnalyticsMsg.append(appName);\r
+ }\r
+\r
+ if (action != null && !action.equals("")) {\r
+ auditLogStoreAnalyticsMsg.append(",Action: ");\r
+ auditLogStoreAnalyticsMsg.append(action);\r
+ }\r
+\r
+ if (activity != null && !activity.equals("")) {\r
+ auditLogStoreAnalyticsMsg.append(",Activity: ");\r
+ auditLogStoreAnalyticsMsg.append(activity);\r
+ }\r
+\r
+ if (actionLink != null && !actionLink.equals("")) {\r
+ auditLogStoreAnalyticsMsg.append(",ActionLink: ");\r
+ auditLogStoreAnalyticsMsg.append(actionLink);\r
+ }\r
+\r
+ if (page != null && !page.equals("")) {\r
+ auditLogStoreAnalyticsMsg.append(",Page: ");\r
+ auditLogStoreAnalyticsMsg.append(page);\r
+ }\r
+\r
+ if (function != null && !function.equals("")) {\r
+ auditLogStoreAnalyticsMsg.append(",Function: ");\r
+ auditLogStoreAnalyticsMsg.append(function);\r
+ }\r
+\r
+ if (type != null && !type.equals("")) {\r
+ auditLogStoreAnalyticsMsg.append(",Type: ");\r
+ auditLogStoreAnalyticsMsg.append(type);\r
+ }\r
+ auditLogStoreAnalyticsMsg.append("]");\r
+ return auditLogStoreAnalyticsMsg.toString();\r
+ }\r
+\r
+}\r