summaryrefslogtreecommitdiffstats
path: root/common/src/main/java/org/onap/so/logger/MsoLogger.java
diff options
context:
space:
mode:
Diffstat (limited to 'common/src/main/java/org/onap/so/logger/MsoLogger.java')
-rw-r--r--common/src/main/java/org/onap/so/logger/MsoLogger.java1193
1 files changed, 1193 insertions, 0 deletions
diff --git a/common/src/main/java/org/onap/so/logger/MsoLogger.java b/common/src/main/java/org/onap/so/logger/MsoLogger.java
new file mode 100644
index 0000000000..10f572e772
--- /dev/null
+++ b/common/src/main/java/org/onap/so/logger/MsoLogger.java
@@ -0,0 +1,1193 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. 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.onap.so.logger;
+
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.lang.invoke.MethodHandles;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.onap.so.entity.MsoRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+
+
+/**
+ * This class supports all of the normal logging functions (debug, info, etc.), prepending
+ * a string of format "[<requestId>|<serviceId]" to each message.
+ *
+ * SO 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 MsoLogger {
+ // 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 SERVICE_NAME_IS_METHOD_NAME = "ServiceNameIsMethodName";
+ 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 DUMMY_VALUE = "trace-#";
+ public static final String UNKNOWN = "UNKNOWN";
+ public static final String CAT_LOG_LEVEL = "CategoryLogLevel";
+ public static final String AUDI_CAT_LOG_LEVEL = "AuditCategoryLogLevel";
+
+ //For getting an identity of calling application
+ public static final String HEADER_FROM_APP_ID = "X-FromAppId";
+ public static final String FROM_APP_ID = "FromAppId";
+ public static final String HEADER_REQUEST_ID = "X-RequestId";
+ public static final String TRANSACTION_ID = "X-TransactionID";
+ public static final String ECOMP_REQUEST_ID = "X-ECOMP-RequestID";
+ public static final String CLIENT_ID = "X-ClientID";
+
+ // Audit/Metric log specific
+ public static final String BEGINTIME = "BeginTimestamp";
+ public static final String STARTTIME = "StartTimeMilis";
+ public static final String ENDTIME = "EndTimestamp";
+ public static final String PARTNERNAME = "PartnerName";
+ public static final String STATUSCODE = "StatusCode";
+ public static final String RESPONSECODE = "ResponseCode";
+ public static final String RESPONSEDESC = "ResponseDesc";
+
+
+ // Metric log specific
+ public static final String METRIC_BEGIN_TIME = "MetricBeginTime";
+ public static final String METRIC_START_TIME = "MetricStartTime";
+ public static final String METRIC_END_TIME = "MetricEndTime";
+ public static final String METRIC_TIMER = "MetricEndTime";
+ public static final String TARGETENTITY = "TargetEntity";
+ public static final String TARGETSERVICENAME = "TargetServiceName";
+ public static final String TARGETVIRTUALENTITY = "TargetVirtualEntity";
+
+ public static final String FATAL_LEVEL = "FATAL";
+ public static final String ERROR_LEVEL = "ERROR";
+ public static final String WARN_LEVEL = "WARN";
+ public static final String INFO_LEVEL = "INFO";
+ public static final String DEBUG_LEVEL = "DEBUG";
+
+ public static final String ERRORCODE = "ErrorCode";
+ public static final String ERRORDESC = "ErrorDesc";
+
+ public static final String COMPLETE = "COMPLETE";
+
+ public enum Catalog {
+ APIH, BPEL, RA, ASDC, GENERAL
+ }
+
+ public enum StatusCode {
+ COMPLETE, ERROR
+ }
+
+ public enum TargetEntity {
+ CAMUNDA("Camunda");
+
+ private String name;
+
+ TargetEntity(String name) {
+ this.name = name;
+ }
+
+ public String getUrl() {
+ return name;
+ }
+ }
+
+ public enum ResponseCode {
+ Suc(0), PermissionError(100), DataError(300), DataNotFound(301), BadRequest(302), SchemaError(
+ 400), BusinessProcesssError(500), ServiceNotAvailable(501), InternalError(
+ 502), Conflict(503), DBAccessError(504), CommunicationError(505), UnknownError(900);
+
+ private int value;
+
+ public int getValue() {
+ return this.value;
+ }
+
+ private ResponseCode(int value) {
+ this.value = value;
+ }
+ }
+
+ public enum ErrorCode {
+ PermissionError(100), AvailabilityError(200), DataError(300), SchemaError(400), BusinessProcesssError(
+ 500), UnknownError(900);
+
+ private int value;
+
+ public int getValue() {
+ return this.value;
+ }
+
+ private ErrorCode(int value) {
+ this.value = value;
+ }
+ }
+
+ private Logger logger;
+ private Logger metricsLogger;
+ private Logger auditLogger;
+ private static String instanceUUID, serverIP, serverName;
+ private MessageEnum exceptionArg, defaultException, defaultWarning, defaultAudit, defaultMetrics;
+
+ // For internal logging of the initialization of MSO logs
+ private static final Logger initLOGGER = LoggerFactory.getLogger(MsoLogger.class.getName());
+
+ private MsoLogger() {
+ this(MsoLogger.Catalog.GENERAL);
+ }
+
+ private MsoLogger(MsoLogger.Catalog cat) {
+ this(cat, MethodHandles.lookup().lookupClass());
+ }
+
+ private MsoLogger(MsoLogger.Catalog cat, Class<?> clazz) {
+ this.logger = LoggerFactory.getLogger(clazz);
+ this.auditLogger = LoggerFactory.getLogger("AUDIT");
+ this.metricsLogger = LoggerFactory.getLogger("METRIC");
+ MsoLogger.initialization();
+ setDefaultLogCatalog(cat);
+ }
+
+ private static synchronized void initialization() {
+ if (instanceUUID == null || ("").equals(instanceUUID)) {
+ instanceUUID = getInstanceUUID();
+ }
+
+ if (serverIP == null || serverName == null || ("").equals(serverIP) || ("").equals(serverName)) {
+ try {
+ InetAddress server = InetAddress.getLocalHost();
+ serverIP = server.getHostAddress();
+ serverName = server.getHostName();
+ } catch (UnknownHostException e) {
+ initLOGGER.error("Could not get local hostname", e);
+ serverIP = "";
+ serverName = "";
+ }
+ }
+ }
+
+
+
+ public static MsoLogger getMsoLogger(MsoLogger.Catalog cat, Class<?> clazz) {
+ return new MsoLogger(cat,clazz);
+ }
+
+
+
+ /**
+ * Record the Metrics event with no argument
+ *
+ * @param startTime
+ * Transaction starting time in millieseconds
+ * @param statusCode
+ * StatusCode of the transaction, either COMPLETE or ERROR
+ * @param responseCode
+ * The response code returned by the sub-components
+ * @param responseDesc
+ * Human redable description of the response code
+ * @param targetEntity
+ * The component which is invoked for this sub-operation
+ * @param targetServiceName
+ * API invoked on the TargetEntity
+ * @param targetVEntity
+ * Target VNF or VM acted opon by the component, if available
+ */
+ public void recordMetricEvent() {
+ metricsLogger.info("");
+ MDC.remove(TIMER);
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ public void recordMetricEvent(Long startTime, StatusCode statusCode, ResponseCode responseCode, String responseDesc,
+ String targetEntity, String targetServiceName, String targetVEntity) {
+ prepareMetricMsg(startTime, statusCode, responseCode.getValue(), responseDesc, targetEntity, targetServiceName,
+ targetVEntity);
+ metricsLogger.info("");
+ MDC.remove(TIMER);
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+
+ /**
+ * Record the Audit event
+ *
+ * @param startTime
+ * Transaction starting time in millieseconds
+ * @param statusCode
+ * StatusCode of the transaction, either COMPLETE or ERROR
+ * @param responseCode
+ * The application specific response code
+ * @param responseDesc
+ * Human redable description of the application response code
+ */
+ public void recordAuditEvent(){
+ auditLogger.info("");
+ }
+
+ public void recordAuditEvent(Long startTime, StatusCode statusCode, ResponseCode responseCode,
+ String responseDesc) {
+ MDC.put(MsoLogger.PARTNERNAME, "UNKNOWN");
+ prepareAuditMsg(startTime, statusCode, responseCode.getValue(), responseDesc);
+ auditLogger.info("");
+ MDC.remove(TIMER);
+ }
+
+ // Debug methods
+ /**
+ * Record the Debug event
+ *
+ * @param msg
+ * The log message to put
+ */
+ public void debug(String msg) {
+ prepareMsg(DEBUG_LEVEL);
+ logger.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);
+ logger.debug(msg, t);
+ }
+
+ public void info(String msg) {
+ prepareMsg(DEBUG_LEVEL);
+ logger.info(msg);
+ }
+
+
+ /**
+ * Log error message with the details of the exception that caused the error.
+ * @param msg
+ * @param throwable
+ */
+ public void error(String msg) {
+ prepareMsg(ERROR_LEVEL);
+ logger.error(msg);
+ }
+
+ /**
+ * Log error message with the details of the exception that caused the error.
+ * @param msg
+ * @param throwable
+ */
+ public void error(String msg, Throwable throwable) {
+ prepareMsg(ERROR_LEVEL);
+ logger.error(msg, throwable);
+ }
+
+ // Info methods
+ /**
+ * Record the Info event
+ *
+ * @param msg
+ * The log message to put
+ */
+ public void info(String msg, String targetEntity, String targetServiceName) {
+ prepareErrorMsg(INFO_LEVEL, targetEntity, targetServiceName, null, "");
+
+ logger.info(msg);
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Info event with 1 argument
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0
+ * The argument used in the log message
+ */
+ public void info(MessageEnum msg, String arg0, String targetEntity, String targetServiceName) {
+ prepareErrorMsg(INFO_LEVEL, targetEntity, targetServiceName, null, "");
+
+ logger.info(msg.toString(), normalize(arg0));
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Info event with 2 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1
+ * The arguments used in the log message
+ */
+ public void info(String msg, String arg0, String arg1, String targetEntity,
+ String targetServiceName) {
+ prepareErrorMsg(INFO_LEVEL, targetEntity, targetServiceName, null, "");
+
+ logger.info(msg, normalize(arg0), normalize(arg1));
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Info event with 3 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1,arg2
+ * The arguments used in the log message
+ */
+ public void info(MessageEnum msg, String arg0, String arg1, String arg2, String targetEntity,
+ String targetServiceName) {
+ prepareErrorMsg(INFO_LEVEL, targetEntity, targetServiceName, null, "");
+
+ logger.info(msg.toString(), normalize(arg0), normalize(arg1), normalize(arg2));
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Info event with 4 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1,arg2,arg3
+ * The arguments used in the log message
+ */
+ public void info(String msg, String arg0, String arg1, String arg2, String arg3,
+ String targetEntity, String targetServiceName) {
+ prepareErrorMsg(INFO_LEVEL, targetEntity, targetServiceName, null, "");
+
+ logger.info(msg, normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3));
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Info event with 5 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1,arg2,arg3,arg4
+ * The arguments used in the log message
+ */
+ public void info(String msg, String arg0, String arg1, String arg2, String arg3, String arg4,
+ String targetEntity, String targetServiceName) {
+ prepareErrorMsg(INFO_LEVEL, targetEntity, targetServiceName, null, "");
+
+ logger.info(msg, normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3), normalize(arg4));
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Info event with 6 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1,arg2,arg3,arg4,arg5
+ * The arguments used in the log message
+ */
+ public void info(String msg, String arg0, String arg1, String arg2, String arg3, String arg4,
+ String arg5, String targetEntity, String targetServiceName) {
+ prepareErrorMsg(INFO_LEVEL, targetEntity, targetServiceName, null, "");
+
+ logger.info(msg, normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3), normalize(arg4),
+ normalize(arg5));
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ // Warning methods
+
+
+ /**
+ * Record the Warning event
+ *
+ * @param msg
+ * The log message to put
+ */
+ public void warnSimple( String targetServiceName, String errorDesc) {
+ logger.warn("Service Name: {} Error: {}" , targetServiceName, errorDesc);
+ }
+ /**
+ * Record the Warning event
+ *
+ * @param msg
+ * The log message to put
+ */
+ public void warn(MessageEnum msg, String targetEntity, String targetServiceName, ErrorCode errorCode,
+ String errorDesc) {
+ prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+
+ logger.warn(msg.toString());
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Warning event
+ *
+ * @param msg
+ * The log message to put
+ * @param t
+ * The exception info
+ */
+ public void warn(MessageEnum msg, String targetEntity, String targetServiceName, ErrorCode errorCode,
+ String errorDesc, Throwable t) {
+ prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.warn("Warning: "+msg, t);
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Warn event with 1 argument
+ *
+ * @param msg
+ * The log message to put
+ * @param arg
+ * The argument used in the log message
+ */
+ public void warn(MessageEnum msg, String arg, String targetEntity, String targetServiceName,
+ ErrorCode errorCode, String errorDesc) {
+ prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.warn(msg.toString(), arg);
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Warn event with 1 argument
+ *
+ * @param msg
+ * The log message to put
+ * @param arg
+ * The arguments used in the log message
+ * @param t
+ * The exception info
+ */
+ public void warn(MessageEnum msg, String arg, String targetEntity, String targetServiceName,
+ ErrorCode errorCode, String errorDesc, Throwable t) {
+ prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.warn(msg.toString(), arg);
+ logger.debug("Exception raised", t);
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Warn event with 2 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1
+ * The arguments used in the log message
+ */
+ public void warn(MessageEnum msg, String arg0, String arg1, String targetEntity,
+ String targetServiceName, ErrorCode errorCode, String errorDesc) {
+ prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.warn(msg.toString(), normalize(arg0), normalize(arg1));
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Warn event with 2 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1
+ * The arguments used in the log message
+ * @param t
+ * The exception info
+ */
+ public void warn(String msg, String arg0, String arg1, String targetEntity,
+ String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
+ prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.warn(msg, normalize(arg0), normalize(arg1));
+ logger.warn(msg, t);
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Warn event with 3 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1,arg2
+ * The arguments used in the log message
+ */
+ public void warn(String msg, String arg0, String arg1, String arg2, String targetEntity,
+ String targetServiceName, ErrorCode errorCode, String errorDesc) {
+ prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.warn(msg, normalize(arg0), normalize(arg1), normalize(arg2));
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Warn event with 3 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1,arg2
+ * The arguments used in the log message
+ * @param t
+ * The exception info
+ */
+ public void warn(String msg, String arg0, String arg1, String arg2, String targetEntity,
+ String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
+ prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.warn(msg, normalize(arg0), normalize(arg1), normalize(arg2));
+ logger.warn(msg, t);
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Warn event with 4 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1,arg2,arg3
+ * The arguments used in the log message
+ */
+ public void warn(String msg, String arg0, String arg1, String arg2, String arg3,
+ String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc) {
+ prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.warn(msg, normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3));
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Warn event with 4 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1,arg2,
+ * arg3 The arguments used in the log message
+ * @param t
+ * The exception info
+ */
+ public void warn(String msg, String arg0, String arg1, String arg2, String arg3,
+ String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
+ prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.warn(msg, normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3));
+ logger.warn(msg, t);
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Warn event with 5 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1,arg2,arg3,arg4
+ * The arguments used in the log message
+ */
+ public void warn(String msg, String arg0, String arg1, String arg2, String arg3, String arg4,
+ String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc) {
+ prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.warn(msg, normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3), normalize(arg4));
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Warn event with 5 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1,arg2,arg3,arg4
+ * The arguments used in the log message
+ * @param t
+ * The exception info
+ */
+ public void warn(String msg, String arg0, String arg1, String arg2, String arg3, String arg4,
+ String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
+ prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.warn(msg, normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3), normalize(arg4));
+ logger.warn(msg, t);
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+
+
+ // Error methods
+ /**
+ * Record the Error event
+ *
+ * @param generalException
+ * The log message to put
+ */
+ public void error(MessageEnum generalException, String targetEntity, String targetServiceName, ErrorCode errorCode,
+ String errorDesc) {
+ prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.error(generalException.toString() + ": " +errorDesc);
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+
+ /**
+ * Record the Error event
+ *
+ * @param msg
+ * The log message to put
+ * @param t
+ * The exception info
+ */
+ public void trace(String traceMessage) {
+ logger.trace(traceMessage);
+ }
+
+
+ /**
+ * Record the Error event
+ *
+ * @param msg
+ * The log message to put
+ * @param t
+ * The exception info
+ */
+ public void error( Throwable t) {
+ logger.error(t.getMessage(), t);
+ }
+
+
+ /**
+ * Record the Error event
+ *
+ * @param msg
+ * The log message to put
+ * @param t
+ * The exception info
+ */
+ public void error(MessageEnum msg, String targetEntity, String targetServiceName, ErrorCode errorCode,
+ String errorDesc, Throwable t) {
+ prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.error(msg.toString(), t);
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Error event with 1 argument
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0
+ * The arguments used in the log message
+ */
+ public void error(MessageEnum msg, String arg0, String targetEntity, String targetServiceName,
+ ErrorCode errorCode, String errorDesc) {
+ prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.error(msg.toString(), normalize(arg0));
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Error event with 1 argument
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0
+ * The arguments used in the log message
+ * @param t
+ * The exception info
+ */
+ public void error(MessageEnum msg, String arg0, String targetEntity, String targetServiceName,
+ ErrorCode errorCode, String errorDesc, Throwable t) {
+ prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.error(msg.toString(), normalize(arg0), t);
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Error event with 2 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1
+ * The arguments used in the log message
+ */
+ public void error(MessageEnum msg, String arg0, String arg1, String targetEntity,
+ String targetServiceName, ErrorCode errorCode, String errorDesc) {
+ prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.error(msg.toString(), normalize(arg0), normalize(arg1));
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Error event with 2 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1
+ * The arguments used in the log message
+ * @param t
+ * The exception info
+ */
+ public void error(MessageEnum msg, String arg0, String arg1, String targetEntity,
+ String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
+ prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.error(msg.toString(), normalize(arg0), normalize(arg1), t);
+ logger.debug("Exception raised", t);
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Error event with 3 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1,arg2
+ * The arguments used in the log message
+ */
+ public void error(MessageEnum msg, String arg0, String arg1, String arg2, String targetEntity,
+ String targetServiceName, ErrorCode errorCode, String errorDesc) {
+ prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.error(msg.toString(), normalize(arg0), normalize(arg1), normalize(arg2));
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Error event with 3 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1,arg2
+ * The arguments used in the log message
+ * @param t
+ * The exception info
+ */
+ public void error(MessageEnum msg, String arg0, String arg1, String arg2, String targetEntity,
+ String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
+ prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.error(msg.toString(), normalize(arg0), normalize(arg1), normalize(arg2), t);
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Error event with 4 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1,arg2,arg3
+ * The arguments used in the log message
+ */
+ public void error(MessageEnum msg, String arg0, String arg1, String arg2, String arg3,
+ String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc) {
+ prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.error(msg.toString(), normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3));
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Error event with 4 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1,arg2,arg3
+ * The arguments used in the log message
+ * @param t
+ * The exception info
+ */
+ public void error(MessageEnum msg, String arg0, String arg1, String arg2, String arg3,
+ String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
+ prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.error(msg.toString(), normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3), t);
+
+ logger.debug("Exception raised", t);
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Error event with 5 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1,arg2,arg3,arg4
+ * The arguments used in the log message
+ */
+ public void error(MessageEnum msg, String arg0, String arg1, String arg2, String arg3, String arg4,
+ String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc) {
+ prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.error(msg.toString(), normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3), normalize(arg4));
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ /**
+ * Record the Error event with 5 arguments
+ *
+ * @param msg
+ * The log message to put
+ * @param arg0,arg1,arg2,arg3,arg4
+ * The arguments used in the log message
+ * @param t
+ * The exception info
+ */
+ public void error(MessageEnum msg, String arg0, String arg1, String arg2, String arg3, String arg4,
+ String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
+ prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
+ logger.error(msg.toString(), normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3), normalize(arg4), t);
+ logger.debug("Exception raised", t);
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+ }
+
+ public void error(String errorMessage, String errorSource, String targetEntity, String targetServiceName,
+ ErrorCode errorCode, String errorText) {
+ prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorText);
+ logger.error(errorMessage);
+ MDC.remove(TARGETENTITY);
+ MDC.remove(TARGETSERVICENAME);
+
+ }
+
+ public void logStackTrace(Exception ex){
+ StringWriter errors = new StringWriter();
+ ex.printStackTrace(new PrintWriter(errors));
+ logger.error(errors.toString());
+ }
+
+ public boolean isDebugEnabled() {
+ return logger.isDebugEnabled();
+ }
+
+ 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);
+
+ // Based on the discussion with Adrian,
+ // if these 2 parameters is not available, using dummy value "trace-#"
+ if (reqId == null || reqId.isEmpty()) {
+ MDC.put(REQUEST_ID, DUMMY_VALUE);
+ }
+
+ if (timer != null) {
+ MDC.put(TIMER, timer);
+ }
+
+ writeIfNotNullorEmpty(SERVICE_NAME,getFinalServiceName(serviceNamep));
+ writeIfNotNullorEmpty(ALERT_SEVERITY,getSeverityLevel(loggingLevel));
+ writeIfNotNullorEmpty(INSTANCE_UUID,instanceUUID);
+ writeIfNotNullorEmpty(SERVER_IP,serverIP);
+ writeIfNotNullorEmpty(FQDN,serverName);
+
+ }
+
+ private void writeIfNotNullorEmpty(String Key, String value) {
+ if (MDC.get(Key) == null|| MDC.get(Key).isEmpty()) {
+ MDC.put(Key, value);
+ }
+ }
+
+ private void prepareAuditMsg(long startTime, StatusCode statusCode, int responseCode, String responseDesc) {
+ long endTime = System.currentTimeMillis();
+ prepareMsg(INFO_LEVEL, null, String.valueOf(endTime - startTime));
+ prepareAuditMetricMsg(startTime, endTime, statusCode, responseCode, responseDesc);
+ }
+
+ private void prepareAuditMetricMsg(long startTime, long endTime, StatusCode statusCode, int responseCode,
+ String responseDesc) {
+ Date startDate = new Date(startTime);
+ Date endDate = new Date(endTime);
+ DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
+
+ MDC.put(BEGINTIME, String.valueOf(formatter.format(startDate)));
+ MDC.put(ENDTIME, String.valueOf(formatter.format(endDate)));
+ MDC.put(STATUSCODE, statusCode.name());
+ MDC.put(RESPONSECODE, String.valueOf(responseCode));
+ MDC.put(RESPONSEDESC, responseDesc);
+ }
+
+ private void prepareErrorMsg(String loggingLevel, String targetEntity, String targetServiceName,
+ ErrorCode errorCode, String errorDesc) {
+ MDC.put(ALERT_SEVERITY, getSeverityLevel(loggingLevel));
+ if(errorCode != null) {
+ MDC.put(ERRORCODE, Integer.toString(errorCode.getValue()));
+ }
+ MDC.put(ERRORDESC, errorDesc);
+ MDC.put(TARGETENTITY, targetEntity);
+ MDC.put(TARGETSERVICENAME, targetServiceName);
+ MDC.put(SERVICE_NAME, getFinalServiceName(getServiceName()));
+ }
+
+ private void prepareMetricMsg(long startTime, StatusCode statusCode, int responseCode, String responseDesc,
+ String targetEntity, String targetServiceName, String targetVEntity) {
+ long endTime = System.currentTimeMillis();
+ prepareMsg(INFO_LEVEL, null, String.valueOf(endTime - startTime));
+ prepareAuditMetricMsg(startTime, endTime, statusCode, responseCode, responseDesc);
+
+ // Populate Metric log specific parameter
+ MDC.put(TARGETENTITY, targetEntity);
+ MDC.put(TARGETSERVICENAME, targetServiceName);
+
+ if (null != targetVEntity) {
+ MDC.put(TARGETVIRTUALENTITY, targetVEntity);
+ }
+ }
+
+ 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;
+ }
+
+ private String getFinalServiceName(String serviceNamep) {
+ // This step to set the serviceName should be put after the className is
+ // get,
+ // since the default serviceName is obtained during the method to get
+ // the className.
+ //
+ // There's 3 ways to set the serviceName. The first method has the most
+ // priority to set the value.
+ // a) If the serviceName is set within the log method, this value will
+ // be used first
+ // b) If serviceName is not set within the log method, the value defined
+ // in the MDC will be used
+ // c) If nothing is set specifically, then MsoLogger will assign a
+ // default(MSO.<method_name>) value to it
+ String serName = MDC.get(MsoLogger.SERVICE_NAME);
+
+ // Check if service name was already set as the method name by a
+ // previous call to this method.
+ String isMethodNameStr = MDC.get(MsoLogger.SERVICE_NAME_IS_METHOD_NAME);
+ boolean isMethodName = isMethodNameStr != null && isMethodNameStr.equals(Boolean.TRUE.toString());
+ if (serviceNamep != null) {
+ return serviceNamep;
+ } else if (serName != null && !isMethodName) {
+ return serName;
+ }
+
+ MDC.put(MsoLogger.SERVICE_NAME_IS_METHOD_NAME, Boolean.TRUE.toString());
+ int limit;
+ StackTraceElement[] classArr = new Exception().getStackTrace();
+ if (classArr.length >= 6) {
+ limit = 7;
+ } else {
+ limit = classArr.length;
+ }
+ for (int i = 1; i < limit; i++) {
+ if (!classArr[i].getClassName().equals(this.getClass().getName())) {
+ return classArr[i].getMethodName();
+ }
+ }
+ return classArr[0].getMethodName();
+ }
+
+ // Based on the discussion with Adrian, instanceUUID is used to identifiy
+ // the mso instance,
+ // it is generated during mso instance initialization period
+ // The same mso instnace will use the same instanceUUID value, even after
+ // restart
+ private static String getInstanceUUID() {
+ return System.getProperty("mso-instance-id");
+ }
+
+ /**
+ * Set the requestId and serviceInstanceId
+ *
+ * @param reqId
+ * The requestId
+ * @param svcId
+ * The serviceInstanceId
+ */
+ public static void setLogContext(String reqId, String svcId) {
+ if (null != reqId) {
+ MDC.put(REQUEST_ID, reqId);
+ }
+
+ if (null != svcId) {
+ MDC.put(SERVICE_INSTANCE_ID, svcId);
+ }
+ }
+
+ /**
+ * Set the remoteIp and the basic HTTP Authentication user
+ *
+ * @param remoteIpp
+ * The remote ip address
+ * @param userp
+ * The basic http authencitation user
+ */
+ public static void setLoggerParameters(String remoteIpp, String userp) {
+ if (null != remoteIpp) {
+ MDC.put(REMOTE_HOST, remoteIpp);
+ }
+ if (null != userp) {
+ MDC.put(USER, userp);
+ }
+ }
+
+ /**
+ * Set the serviceName
+ *
+ * @param serviceNamep
+ * The service name
+ */
+ public static void setServiceName(String serviceNamep) {
+ if (null != serviceNamep) {
+ MDC.put(SERVICE_NAME, serviceNamep);
+ MDC.remove(SERVICE_NAME_IS_METHOD_NAME);
+ }
+ }
+
+ /**
+ * Get the serviceName
+ *
+ * @return The service name
+ */
+ public static String getServiceName() {
+ return MDC.get(SERVICE_NAME);
+ }
+
+ /**
+ * Reset the serviceName
+ */
+ public static void resetServiceName() {
+ MDC.remove(SERVICE_NAME);
+ }
+
+ /**
+ * Set the requestId and serviceInstanceId based on the mso request
+ *
+ * @param msoRequest
+ * The mso request
+ */
+ public static void setLogContext(MsoRequest msoRequest) {
+ if (msoRequest != null) {
+ MDC.put(REQUEST_ID, msoRequest.getRequestId());
+ MDC.put(SERVICE_INSTANCE_ID, msoRequest.getServiceInstanceId());
+ } else {
+ MDC.put(REQUEST_ID, DUMMY_VALUE);
+ MDC.put(SERVICE_INSTANCE_ID, DUMMY_VALUE);
+ }
+ }
+
+ private String normalize(String input) {
+ if (input == null) {
+ return null;
+ }
+ String result = input.replace('|', '!');
+ result = result.replace("\n", " - ");
+ return result;
+ }
+
+ private void setDefaultLogCatalog(MsoLogger.Catalog cat) {
+ if ("APIH".equals(cat.toString())) {
+ exceptionArg = MessageEnum.APIH_GENERAL_EXCEPTION_ARG;
+ defaultException = MessageEnum.APIH_GENERAL_EXCEPTION;
+ defaultWarning = MessageEnum.APIH_GENERAL_WARNING;
+ defaultAudit = MessageEnum.APIH_AUDIT_EXEC;
+ defaultMetrics = MessageEnum.APIH_GENERAL_METRICS;
+ } else if ("RA".equals(cat.toString())) {
+ exceptionArg = MessageEnum.RA_GENERAL_EXCEPTION_ARG;
+ defaultException = MessageEnum.RA_GENERAL_EXCEPTION;
+ defaultWarning = MessageEnum.RA_GENERAL_WARNING;
+ defaultAudit = MessageEnum.RA_AUDIT_EXEC;
+ defaultMetrics = MessageEnum.RA_GENERAL_METRICS;
+ } else if ("BPEL".equals(cat.toString())) {
+ exceptionArg = MessageEnum.BPMN_GENERAL_EXCEPTION_ARG;
+ defaultException = MessageEnum.BPMN_GENERAL_EXCEPTION;
+ defaultWarning = MessageEnum.BPMN_GENERAL_WARNING;
+ defaultAudit = MessageEnum.BPMN_AUDIT_EXEC;
+ defaultMetrics = MessageEnum.BPMN_GENERAL_METRICS;
+ } else if ("ASDC".equals(cat.toString())) {
+ exceptionArg = MessageEnum.ASDC_GENERAL_EXCEPTION_ARG;
+ defaultException = MessageEnum.ASDC_GENERAL_EXCEPTION;
+ defaultWarning = MessageEnum.ASDC_GENERAL_WARNING;
+ defaultAudit = MessageEnum.ASDC_AUDIT_EXEC;
+ defaultMetrics = MessageEnum.ASDC_GENERAL_METRICS;
+ } else {
+ exceptionArg = MessageEnum.GENERAL_EXCEPTION_ARG;
+ defaultException = MessageEnum.GENERAL_EXCEPTION;
+ defaultWarning = MessageEnum.GENERAL_WARNING;
+ defaultAudit = MessageEnum.AUDIT_EXEC;
+ defaultMetrics = MessageEnum.GENERAL_METRICS;
+ }
+ }
+
+ public void warnSimple(String message, Exception e) {
+ logger.warn(message,e);
+
+ }
+
+
+
+
+
+}