2 * Copyright © 2016-2018 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.openecomp.sdc.logging.slf4j;
19 import java.text.SimpleDateFormat;
20 import java.util.UUID;
21 import org.openecomp.sdc.logging.api.AuditData;
22 import org.openecomp.sdc.logging.api.Logger;
23 import org.openecomp.sdc.logging.api.MetricsData;
24 import org.slf4j.LoggerFactory;
28 * Delegates log calls to SLF4J API and MDC.
33 class SLF4JLoggerWrapper implements Logger {
35 //The specified format presents time in UTC formatted per ISO 8601, as required by ONAP logging guidelines
36 private static final String DATE_TIME_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
38 private final org.slf4j.Logger logger;
40 // May cause http://www.slf4j.org/codes.html#loggerNameMismatch
41 SLF4JLoggerWrapper(Class<?> clazz) {
42 this(LoggerFactory.getLogger(clazz));
45 SLF4JLoggerWrapper(org.slf4j.Logger delegate) {
46 this.logger = delegate;
49 SLF4JLoggerWrapper(String className) {
50 this(LoggerFactory.getLogger(className));
54 public String getName() {
55 return logger.getName();
59 public boolean isMetricsEnabled() {
60 return logger.isInfoEnabled(Markers.METRICS);
64 public void metrics(String msg) {
65 // do nothing, left for backward compatibility
69 public void metrics(MetricsData data) {
72 return; // not going to fail because of null
76 putMetricsOnMdc(data);
77 logger.info(Markers.METRICS, "");
79 clearMetricsFromMdc();
83 private void putMetricsOnMdc(MetricsData metrics) {
85 SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_TIME_PATTERN);
86 unsafePutOnMdc(MetricsField.BEGIN_TIMESTAMP, dateFormat.format(metrics.getStartTime()));
87 unsafePutOnMdc(MetricsField.END_TIMESTAMP, dateFormat.format(metrics.getEndTime()));
88 unsafePutOnMdc(MetricsField.ELAPSED_TIME, String.valueOf(metrics.getEndTime() - metrics.getStartTime()));
89 safePutOnMdc(MetricsField.RESPONSE_CODE, metrics.getResponseCode());
90 safePutOnMdc(MetricsField.RESPONSE_DESCRIPTION, metrics.getResponseDescription());
91 safePutOnMdc(MetricsField.CLIENT_IP_ADDRESS, metrics.getClientIpAddress());
92 safePutOnMdc(MetricsField.TARGET_ENTITY, metrics.getTargetEntity());
93 safePutOnMdc(MetricsField.TARGET_VIRTUAL_ENTITY, metrics.getTargetVirtualEntity());
95 if (metrics.getStatusCode() != null) {
96 unsafePutOnMdc(MetricsField.STATUS_CODE, metrics.getStatusCode().name());
100 private void clearMetricsFromMdc() {
101 for (MetricsField f : MetricsField.values()) {
102 MDC.remove(f.asKey());
106 private static void unsafePutOnMdc(MDCField field, String value) {
107 MDC.put(field.asKey(), value);
110 private static void safePutOnMdc(MDCField field, String value) {
112 unsafePutOnMdc(field, value);
117 public boolean isAuditEnabled() {
118 return logger.isInfoEnabled(Markers.EXIT);
122 public void auditEntry(AuditData data) {
125 return; // not failing if null
130 logger.info(Markers.ENTRY, "");
138 public void auditExit(AuditData data) {
141 return; // not failing if null
146 logger.info(Markers.EXIT, "");
152 private void putAuditOnMdc(AuditData audit) {
154 SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_TIME_PATTERN);
155 unsafePutOnMdc(AuditField.BEGIN_TIMESTAMP, dateFormat.format(audit.getStartTime()));
156 unsafePutOnMdc(AuditField.END_TIMESTAMP, dateFormat.format(audit.getEndTime()));
157 unsafePutOnMdc(AuditField.ELAPSED_TIME, String.valueOf(audit.getEndTime() - audit.getStartTime()));
158 safePutOnMdc(AuditField.RESPONSE_CODE, audit.getResponseCode());
159 safePutOnMdc(AuditField.RESPONSE_DESCRIPTION, audit.getResponseDescription());
160 safePutOnMdc(AuditField.CLIENT_IP_ADDRESS, audit.getClientIpAddress());
161 unsafePutOnMdc(AuditField.INVOCATION_ID, UUID.randomUUID().toString());
163 if (audit.getStatusCode() != null) {
164 unsafePutOnMdc(AuditField.STATUS_CODE, audit.getStatusCode().name());
168 private void clearAuditFromMdc() {
169 for (AuditField f : AuditField.values()) {
170 MDC.remove(f.asKey());
175 public boolean isDebugEnabled() {
176 return logger.isDebugEnabled();
180 public void debug(String msg) {
185 public void debug(String format, Object arg) {
186 logger.debug(format, arg);
190 public void debug(String format, Object arg1, Object arg2) {
191 logger.debug(format, arg1, arg2);
195 public void debug(String format, Object... arguments) {
196 logger.debug(format, arguments);
200 public void debug(String msg, Throwable t) {
201 logger.debug(msg, t);
205 public boolean isInfoEnabled() {
206 return logger.isInfoEnabled();
210 public void info(String msg) {
215 public void info(String format, Object arg) {
216 logger.info(format, arg);
220 public void info(String format, Object arg1, Object arg2) {
221 logger.info(format, arg1, arg2);
225 public void info(String format, Object... arguments) {
226 logger.info(format, arguments);
230 public void info(String msg, Throwable t) {
235 public boolean isWarnEnabled() {
236 return logger.isWarnEnabled();
240 public void warn(String msg) {
245 public void warn(String format, Object arg) {
246 logger.warn(format, arg);
250 public void warn(String format, Object... arguments) {
251 logger.warn(format, arguments);
255 public void warn(String format, Object arg1, Object arg2) {
256 logger.warn(format, arg1, arg2);
260 public void warn(String msg, Throwable t) {
265 public boolean isErrorEnabled() {
266 return logger.isErrorEnabled();
270 public void error(String msg) {
275 public void error(String format, Object arg) {
276 logger.error(format, arg);
280 public void error(String format, Object arg1, Object arg2) {
281 logger.error(format, arg1, arg2);
285 public void error(String format, Object... arguments) {
286 logger.error(format, arguments);
290 public void error(String msg, Throwable t) {
291 logger.error(msg, t);