aboutsummaryrefslogtreecommitdiffstats
path: root/operation-utils/src/main/java/org/openecomp/logger/EcompLogger.java
diff options
context:
space:
mode:
Diffstat (limited to 'operation-utils/src/main/java/org/openecomp/logger/EcompLogger.java')
-rw-r--r--operation-utils/src/main/java/org/openecomp/logger/EcompLogger.java406
1 files changed, 406 insertions, 0 deletions
diff --git a/operation-utils/src/main/java/org/openecomp/logger/EcompLogger.java b/operation-utils/src/main/java/org/openecomp/logger/EcompLogger.java
new file mode 100644
index 0000000..254b06e
--- /dev/null
+++ b/operation-utils/src/main/java/org/openecomp/logger/EcompLogger.java
@@ -0,0 +1,406 @@
+
+/*-
+ * ============LICENSE_START==========================================
+ * OPENECOMP - DCAE
+ * ===================================================================
+ * Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END============================================
+ */
+
+
+package org.openecomp.logger;
+
+
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.Date;
+import java.util.UUID;
+import java.util.logging.Logger;
+
+import org.slf4j.MDC;
+
+import org.openecomp.entity.EcompOperation;
+import org.openecomp.entity.EcompOperationEnum;
+import org.openecomp.entity.EcompSubComponentInstance;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.att.eelf.configuration.SLF4jWrapper;
+
+/**
+ * Simple wrapper around the EELF Logger class for MSO usage.
+ * This class supports all of the normal logging functions (debug, info, etc.),
+ * prepending a string of format "[<requestId>|<serviceId]" to each message.
+ *
+ * MSO code should initialize with these IDs when available, so that individual
+ * requests and/or services can be tracked throughout the various MSO component
+ * logs (API Handler, BPEL, and Adapters).
+ *
+ */
+public class EcompLogger {
+ // MDC parameters
+ public static final String REQUEST_ID = "RequestId";
+ public static final String SERVICE_INSTANCE_ID = "ServiceInstanceId";
+ public static final String SERVICE_NAME = "ServiceName";
+ public static final String INSTANCE_UUID = "InstanceUUID";
+ public static final String SERVER_IP = "ServerIPAddress";
+ public static final String FQDN = "ServerFQDN";
+ public static final String REMOTE_HOST = "RemoteHost";
+ public static final String ALERT_SEVERITY = "AlertSeverity";
+ public static final String TIMER = "Timer";
+ public static final String USER = "User";
+ public static final String CATALOG = "Catalog";
+ public static final String DUMMY_REQUEST_VALUE = "?";
+ public static final String DUMMY_SERVICE_INSTANCE_VALUE = "??";
+
+ private static final String FATAL_LEVEL = "FATAL";
+ private static final String ERROR_LEVEL = "ERROR";
+ private static final String WARN_LEVEL = "WARN";
+ private static final String INFO_LEVEL = "INFO";
+ private static final String DEBUG_LEVEL = "DEBUG";
+
+ private EELFLogger errorLogger, auditLogger, metricsLogger, debugLogger;
+
+
+ // For internal logging of the initialization of MSO logs
+ private static final Logger LOGGER = Logger.getLogger (EcompLogger.class.getName ());
+ private static final String ERROR_LOGGER_NAME = "org.openecomp.error";
+ private static final String AUDIT_LOGGER_NAME = "org.openecomp.audit";
+ private static final String METRICS_LOGGER_NAME = "org.openecomp.metrics";
+ private static final String DEBUG_LOGGER_NAME = "org.openecomp.debug";
+
+
+ private EcompLogger () {
+ this.errorLogger = new SLF4jWrapper(ERROR_LOGGER_NAME);
+ this.auditLogger = new SLF4jWrapper(AUDIT_LOGGER_NAME);;
+ this.metricsLogger = new SLF4jWrapper(METRICS_LOGGER_NAME);
+ this.debugLogger = new SLF4jWrapper(DEBUG_LOGGER_NAME);
+ }
+
+
+ public static synchronized EcompLogger getEcompLogger () {
+ return new EcompLogger ();
+ }
+
+ /**
+ * Record the Audit start event
+ *
+ */
+ public void recordAuditEventStart (EcompMessageEnum msg, String... args) {
+ prepareMsg (INFO_LEVEL);
+ setStart();
+ auditLogger.info (msg, args);
+ }
+ /**
+ * Record the Audit start event
+ *
+ */
+ public void recordAuditEventStart () {
+ recordAuditEventStart(GenericMessageEnum.AUDIT_BEGIN);
+ }
+
+ /**
+ * Record the Audit end event with log message to put
+ *
+ * @param arg0 The log message to put
+ */
+ public void recordAuditEventEnd (EcompMessageEnum msg, String... args) {
+ setTimer();
+ prepareMsg (INFO_LEVEL);
+ auditLogger.info (msg, normalizeArray(args));
+ }
+
+ /**
+ * Record the Audit end event with log message to put
+ *
+ * @param arg0 The log message to put
+ */
+ public void recordAuditEventEnd () {
+ auditLogger.info (GenericMessageEnum.AUDIT_END);
+ }
+ /**
+ * Record the Metric start event without log message
+ *
+ */
+ public void recordMetricEventStart (EcompMessageEnum msg, String... args) {
+ prepareMsg (INFO_LEVEL);
+ setStart();
+ metricsLogger.info (msg, args);
+ }
+
+ /**
+ * Record the Metric end event with log message to put
+ *
+ * @param arg0 The log message to put
+ */
+ public void recordMetricEventEnd (EcompMessageEnum msg, String... args) {
+ prepareMsg (INFO_LEVEL);
+ setTimer();
+ metricsLogger.info (msg, normalizeArray(args));
+ }
+ /**
+ * Record the Metric start event without log message
+ *
+ */
+ public void recordMetricEventStart () {
+ recordMetricEventStart(GenericMessageEnum.METRICS_BEGIN);
+ }
+
+ /**
+ * Record the Metric end event with log message to put
+ *
+ * @param arg0 The log message to put
+ */
+ public void recordMetricEventEnd () {
+ recordMetricEventEnd (GenericMessageEnum.METRICS_END);
+ }
+
+ // Debug methods
+ /**
+ * Record the Debug event
+ *
+ * @param msg The log message to put
+ */
+ public void debug (String msg) {
+ prepareMsg (DEBUG_LEVEL);
+ errorLogger.debug (msg);
+ }
+
+ /**
+ * Record the Debug event
+ *
+ * @param msg The log message to put
+ * @param t The exception to put
+ */
+ public void debug (String msg, Throwable t) {
+ prepareMsg (DEBUG_LEVEL);
+ errorLogger.debug (msg);
+ }
+
+ // Info methods
+ /**
+ * Record the Info event
+ *
+ * @param msg The log message to put
+ */
+ public void info (EcompMessageEnum msg, String... args) {
+ prepareMsg (INFO_LEVEL);
+ errorLogger.info (msg,normalizeArray(args));
+ }
+
+ /**
+ * Record the Info event
+ *
+ * @param msg The log message to put
+ * @param t The exception info
+ */
+ public void info (EcompMessageEnum msg, Throwable t, String... args) {
+ prepareMsg (WARN_LEVEL);
+ errorLogger.info (msg,normalizeArray(args));
+ errorLogger.info ("Exception raised: " + getNormalizedStackTrace (t));
+ errorLogger.debug ("Exception raised", t);
+ }
+
+ // Warning methods
+ /**
+ * Record the Warning event
+ *
+ * @param msg The log message to put
+ */
+ public void warn (EcompMessageEnum msg, String... args) {
+ prepareMsg (WARN_LEVEL);
+ errorLogger.warn (msg,normalizeArray(args));
+ }
+
+
+
+ /**
+ * Record the Warning event
+ *
+ * @param msg The log message to put
+ * @param t The exception info
+ */
+ public void warn (EcompMessageEnum msg, Throwable t, String... args) {
+ prepareMsg (WARN_LEVEL);
+ errorLogger.warn (msg,normalizeArray(args));
+ errorLogger.warn ("Exception raised: " + getNormalizedStackTrace (t));
+ errorLogger.debug ("Exception raised", t);
+ }
+
+ // Error methods
+ /**
+ * Record the Error event
+ *
+ * @param msg The log message to put
+ */
+ public void error (EcompMessageEnum msg, String... args) {
+ prepareMsg (ERROR_LEVEL);
+ errorLogger.error (msg, normalizeArray(args));
+ }
+
+ /**
+ * Record the Error event
+ *
+ * @param msg The log message to put
+ * @param t The exception info
+ */
+ public void error (EcompMessageEnum msg, Throwable t, String... args) {
+ prepareMsg (ERROR_LEVEL);
+ errorLogger.error (msg, normalizeArray(args));
+ errorLogger.error (GenericMessageEnum.GENERAL_EXCEPTION, getNormalizedStackTrace (t));
+ errorLogger.debug ("Exception raised", t);
+ }
+
+ public boolean isDebugEnabled () {
+ return errorLogger.isDebugEnabled();
+ }
+
+ private void setStart() {
+ MDC.put("startTime", Long.toString(new Date().getTime()));
+ }
+
+
+ private void setTimer() {
+ Date d = new Date(Long.parseLong(MDC.get("startTime")));
+ MDC.put(TIMER, Long.toString(new Date().getTime()-d.getTime()));
+ }
+
+
+ private void prepareMsg (String loggingLevel) {
+ prepareMsg (loggingLevel, null, null);
+ }
+
+ private void prepareMsg (String loggingLevel, String serviceNamep, String timer) {
+ String reqId = MDC.get (REQUEST_ID);
+ String svcId = MDC.get (SERVICE_INSTANCE_ID);
+
+ if (reqId == null || reqId.isEmpty()) {
+ MDC.put (REQUEST_ID, DUMMY_REQUEST_VALUE);
+ }
+
+ if (svcId == null || svcId.isEmpty()) {
+ MDC.put (SERVICE_INSTANCE_ID, DUMMY_SERVICE_INSTANCE_VALUE);
+ }
+
+ if (timer != null) {
+ MDC.put (TIMER, timer);
+ } else {
+ MDC.remove(TIMER);
+ }
+
+ MDC.put (ALERT_SEVERITY, getSeverityLevel (loggingLevel));
+// MDC.put (INSTANCE_UUID, EcompSubComponentInstance.getUuid());
+ MDC.put (SERVER_IP, EcompSubComponentInstance.getServerIP());
+ MDC.put (FQDN, EcompSubComponentInstance.getServerName());
+ }
+
+ private String getSeverityLevel (String loggingLevel) {
+ String severity;
+ // According to the Nagios alerting: 0=OK; 1=WARNING; 2=UNKOWN; 3=CRITICAL
+ switch (loggingLevel) {
+ case ERROR_LEVEL:
+ severity = "2";
+ break;
+ case FATAL_LEVEL:
+ severity = "3";
+ break;
+ case WARN_LEVEL:
+ severity = "1";
+ break;
+ default:
+ severity = "0";
+ break;
+ }
+ return severity;
+ }
+
+
+ public static void setLogContext (String reqId, String svcId) {
+ MDC.put (REQUEST_ID, reqId);
+ MDC.put (SERVICE_INSTANCE_ID, svcId);
+ }
+
+ public static void setLoggerParameters (String remoteIpp, String userp) {
+ MDC.put (REMOTE_HOST, remoteIpp);
+ MDC.put (USER, userp);
+ }
+
+ public static void setServiceName (String serviceNamep) {
+ MDC.put (SERVICE_NAME, serviceNamep);
+ }
+
+ public static void resetServiceName () {
+ MDC.remove (SERVICE_NAME);
+ }
+
+ public static void setLogContext (EcompOperation operation) {
+ if (operation != null) {
+ MDC.put (REQUEST_ID, operation.getRequestId());
+ MDC.put (SERVICE_INSTANCE_ID, operation.getServiceInstanceId());
+ }
+ else {
+ MDC.put (REQUEST_ID, DUMMY_REQUEST_VALUE);
+ MDC.put (SERVICE_INSTANCE_ID, DUMMY_SERVICE_INSTANCE_VALUE);
+ }
+ }
+
+ private String normalize (String input) {
+ if (input == null) {
+ return null;
+ }
+ String result = input.replace ('|', '!');
+ result = result.replace ("\n", " - ");
+ return result;
+ }
+
+
+ private String[] normalizeArray(String[] args) {
+ for (int i = 0; i< args.length; i++) {
+ args[i] = normalize(args[i]);
+ }
+ return args;
+ }
+
+ private String getNormalizedStackTrace (Throwable t) {
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ t.printStackTrace(pw);
+ return sw.toString().replace ('|', '!').replace ("\n", " - ");
+ }
+
+
+ public void setOperation(EcompOperationEnum op) {
+ MDC.put (SERVICE_NAME, op.toString());
+ }
+
+ public void newRequestId() {
+ String uuid = UUID.randomUUID().toString();
+ MDC.put (REQUEST_ID, uuid);
+ }
+
+
+ public void setRequestId(String requestId) {
+ MDC.put (REQUEST_ID, requestId);
+ }
+
+ public void setRemoteHost(String remote) {
+ MDC.put (REMOTE_HOST, remote);
+ }
+
+ public void setInstanceId(String instance) {
+ MDC.put (INSTANCE_UUID, instance);
+ }
+
+}