2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.common.log.elements;
23 import com.google.common.annotations.VisibleForTesting;
24 import org.apache.commons.lang3.StringUtils;
25 import org.openecomp.sdc.common.log.api.ILogFieldsHandler;
26 import org.openecomp.sdc.common.log.api.ILogger;
27 import org.openecomp.sdc.common.log.enums.LogLevel;
28 import org.openecomp.sdc.common.log.enums.LogMarkers;
29 import org.openecomp.sdc.common.util.ThreadLocalsHolder;
30 import org.slf4j.Logger;
31 import org.slf4j.Marker;
32 import org.slf4j.MarkerFactory;
34 import java.util.Arrays;
35 import java.util.List;
39 * Created by mm288v on 12/27/2017.
40 * This class holds the common behavior of all Loger-Typed classes.
41 * The Concrete loggers shoudl derive from this one.
43 public abstract class LoggerBase implements ILogger {
44 private final Logger myLogger;
45 private final Marker myMarker;
46 protected final ILogFieldsHandler ecompLogFieldsHandler;
47 private final static String missingLogFieldsMsg = "mandatory parameters for ECOMP logging, missing fields: %s, original message: %s";
49 LoggerBase(ILogFieldsHandler ecompLogFieldsHandler, Marker marker, Logger logger) {
50 this.ecompLogFieldsHandler = ecompLogFieldsHandler;
51 this.myMarker = marker;
52 this.myLogger = logger;
53 setKeyRequestIdIfNotSetYet();
56 protected void setKeyRequestIdIfNotSetYet() {
57 if (StringUtils.isEmpty(ecompLogFieldsHandler.getKeyRequestId())) {
58 setKeyRequestId(ThreadLocalsHolder.getUuid());
61 private void validateMandatoryFields(String originMsg) {
62 // this method only checks if the mandatory fields have been initialized
63 String filedNameThatHasNotBeenInitialized = checkMandatoryFieldsExistInMDC();
65 if (myLogger.isDebugEnabled() && !"".equalsIgnoreCase(filedNameThatHasNotBeenInitialized)) {
66 myLogger.debug(MarkerFactory.getMarker(LogMarkers.DEBUG_MARKER.text()),
67 String.format(missingLogFieldsMsg, filedNameThatHasNotBeenInitialized, originMsg));
72 String checkMandatoryFieldsExistInMDC() {
73 // this method returns a String of uninitialised fields
74 StringBuilder missingFields = new StringBuilder();
75 getMandatoryFields().forEach(field -> {
76 if (ecompLogFieldsHandler.isMDCParamEmpty(field)) {
77 missingFields.append(field).append(" ");
80 return missingFields.toString();
83 public abstract List<String> getMandatoryFields();
85 protected String convertExceptionStackToString(Exception ex) {
86 StringBuilder stackTrack = new StringBuilder();
87 Arrays.asList(ex.getStackTrace()).forEach(item -> stackTrack.append(item.toString()).append("\n"));
88 return stackTrack.toString();
92 public void log(LogLevel logLevel, String message) {
93 log(logLevel, message, (Object) null);
97 public void log(LogLevel logLevel, String message, Object...params) {
98 validateMandatoryFields(message);
102 case FATAL: //TODO check how to log "FATAL" word
103 myLogger.error(myMarker, message, params);
106 myLogger.warn(myMarker, message, params);
109 myLogger.info(myMarker, message, params);
112 myLogger.debug(myMarker, message, params);
115 myLogger.trace(myMarker, message, params);
123 public void log(LogLevel logLevel, String message, Throwable throwable) {
124 validateMandatoryFields(message);
128 case FATAL: //TODO check how to log "FATAL" word
129 myLogger.error(myMarker, createErrorMessage(message, throwable));
132 myLogger.warn(myMarker, createErrorMessage(message, throwable));
135 myLogger.info(myMarker, createErrorMessage(message, throwable));
138 myLogger.debug(myMarker, message, throwable);
141 myLogger.trace(myMarker, message, throwable);
148 protected String createErrorMessage(String message, Throwable throwable) {
149 return String.format("%s: %s", message, throwable.getLocalizedMessage());
154 public ILogger clear() {
155 ecompLogFieldsHandler.clear();
160 public ILogger setKeyRequestId(String keyRequestId) {
161 ecompLogFieldsHandler.setKeyRequestId(keyRequestId);