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 static org.openecomp.sdc.logging.slf4j.SLF4JLoggerWrapper.AuditField.BEGIN_TIMESTAMP;
20 import static org.openecomp.sdc.logging.slf4j.SLF4JLoggerWrapper.AuditField.CLIENT_IP_ADDRESS;
21 import static org.openecomp.sdc.logging.slf4j.SLF4JLoggerWrapper.AuditField.ELAPSED_TIME;
22 import static org.openecomp.sdc.logging.slf4j.SLF4JLoggerWrapper.AuditField.END_TIMESTAMP;
23 import static org.openecomp.sdc.logging.slf4j.SLF4JLoggerWrapper.AuditField.RESPONSE_CODE;
24 import static org.openecomp.sdc.logging.slf4j.SLF4JLoggerWrapper.AuditField.RESPONSE_DESCRIPTION;
25 import static org.openecomp.sdc.logging.slf4j.SLF4JLoggerWrapper.AuditField.STATUS_CODE;
27 import java.text.Format;
28 import java.text.SimpleDateFormat;
29 import org.openecomp.sdc.logging.api.AuditData;
30 import org.openecomp.sdc.logging.api.Logger;
31 import org.slf4j.LoggerFactory;
38 class SLF4JLoggerWrapper implements Logger {
40 //The specified format presents time in UTC formatted per ISO 8601, as required by ONAP logging guidelines
41 private static final String DATE_TIME_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
43 private static final String PREFIX = "";
47 BEGIN_TIMESTAMP(PREFIX + "BeginTimestamp"),
48 END_TIMESTAMP(PREFIX + "EndTimestamp"),
49 ELAPSED_TIME(PREFIX + "ElapsedTime"),
50 STATUS_CODE(PREFIX + "StatusCode"),
51 RESPONSE_CODE(PREFIX + "ResponseCode"),
52 RESPONSE_DESCRIPTION(PREFIX + "ResponseDescription"),
53 CLIENT_IP_ADDRESS(PREFIX + "ClientIpAddress");
55 private final String key;
57 AuditField(String key) {
61 public String asKey() {
66 private final org.slf4j.Logger logger;
68 SLF4JLoggerWrapper(org.slf4j.Logger delegate) {
69 this.logger = delegate;
72 // May cause http://www.slf4j.org/codes.html#loggerNameMismatch
73 SLF4JLoggerWrapper(Class<?> clazz) {
74 this(LoggerFactory.getLogger(clazz));
77 SLF4JLoggerWrapper(String className) {
78 this(LoggerFactory.getLogger(className));
82 public String getName() {
83 return logger.getName();
87 public boolean isMetricsEnabled() {
88 return logger.isInfoEnabled(Markers.METRICS);
92 public void metrics(String msg) {
93 logger.info(Markers.METRICS, msg);
97 public void metrics(String msg, Object arg) {
98 logger.info(Markers.METRICS, msg, arg);
102 public void metrics(String msg, Object arg1, Object arg2) {
103 logger.info(Markers.METRICS, msg, arg1, arg2);
107 public void metrics(String msg, Object... arguments) {
108 logger.info(Markers.METRICS, msg, arguments);
112 public void metrics(String msg, Throwable t) {
113 logger.info(Markers.METRICS, msg, t);
117 public boolean isAuditEnabled() {
118 return logger.isInfoEnabled(Markers.AUDIT);
122 public void audit(AuditData data) {
125 return; // not failing if null
129 putIfNotNull(RESPONSE_CODE.key, data.getResponseCode());
130 putIfNotNull(RESPONSE_DESCRIPTION.key, data.getResponseDescription());
131 putIfNotNull(CLIENT_IP_ADDRESS.key, data.getClientIpAddress());
133 if (data.getStatusCode() != null) {
134 MDC.put(STATUS_CODE.key, data.getStatusCode().name());
138 logger.info(Markers.AUDIT, "");
140 for (AuditField f : AuditField.values()) {
146 private void putIfNotNull(String key, String value) {
152 private void putTimes(AuditData data) {
153 // SimpleDateFormat is not thread-safe and cannot be a constant
154 Format dateTimeFormat = new SimpleDateFormat(DATE_TIME_PATTERN);
155 MDC.put(BEGIN_TIMESTAMP.key, dateTimeFormat.format(data.getStartTime()));
156 MDC.put(END_TIMESTAMP.key, dateTimeFormat.format(data.getEndTime()));
157 MDC.put(ELAPSED_TIME.key, String.valueOf(data.getEndTime() - data.getStartTime()));
161 public boolean isDebugEnabled() {
162 return logger.isDebugEnabled();
166 public void debug(String msg) {
171 public void debug(String format, Object arg) {
172 logger.debug(format, arg);
176 public void debug(String format, Object arg1, Object arg2) {
177 logger.debug(format, arg1, arg2);
181 public void debug(String format, Object... arguments) {
182 logger.debug(format, arguments);
186 public void debug(String msg, Throwable t) {
187 logger.debug(msg, t);
191 public boolean isInfoEnabled() {
192 return logger.isInfoEnabled();
196 public void info(String msg) {
201 public void info(String format, Object arg) {
202 logger.info(format, arg);
206 public void info(String format, Object arg1, Object arg2) {
207 logger.info(format, arg1, arg2);
211 public void info(String format, Object... arguments) {
212 logger.info(format, arguments);
216 public void info(String msg, Throwable t) {
221 public boolean isWarnEnabled() {
222 return logger.isWarnEnabled();
226 public void warn(String msg) {
231 public void warn(String format, Object arg) {
232 logger.warn(format, arg);
236 public void warn(String format, Object... arguments) {
237 logger.warn(format, arguments);
241 public void warn(String format, Object arg1, Object arg2) {
242 logger.warn(format, arg1, arg2);
246 public void warn(String msg, Throwable t) {
251 public boolean isErrorEnabled() {
252 return logger.isErrorEnabled();
256 public void error(String msg) {
261 public void error(String format, Object arg) {
262 logger.error(format, arg);
266 public void error(String format, Object arg1, Object arg2) {
267 logger.error(format, arg1, arg2);
271 public void error(String format, Object... arguments) {
272 logger.error(format, arguments);
276 public void error(String msg, Throwable t) {
277 logger.error(msg, t);