View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements. See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache license, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License. You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the license for the specific language governing permissions and
15   * limitations under the license.
16   */
17  package org.slf4j.impl;
18  
19  import org.apache.logging.log4j.Level;
20  import org.apache.logging.log4j.LogManager;
21  import org.apache.logging.log4j.Logger;
22  import org.apache.logging.log4j.message.Message;
23  import org.apache.logging.log4j.message.ParameterizedMessage;
24  import org.apache.logging.log4j.message.SimpleMessage;
25  import org.apache.logging.log4j.message.StructuredDataMessage;
26  import org.apache.logging.log4j.spi.AbstractLogger;
27  import org.apache.logging.log4j.spi.AbstractLoggerWrapper;
28  import org.slf4j.Marker;
29  import org.slf4j.MarkerFactory;
30  import org.slf4j.ext.EventData;
31  import org.slf4j.spi.LocationAwareLogger;
32  
33  import java.util.Map;
34  
35  /**
36   *
37   */
38  public class SLF4JLogger implements LocationAwareLogger {
39  
40      private static final String FQCN = SLF4JLogger.class.getName();
41      private static final Marker EVENT_MARKER = MarkerFactory.getMarker("EVENT");
42      private final boolean eventLogger;
43      private final AbstractLoggerWrapper logger;
44      private final String name;
45  
46      public SLF4JLogger(final AbstractLogger logger, final String name) {
47          final Logger l = LogManager.getLogger(name);
48          this.logger = new AbstractLoggerWrapper(logger, name, null);
49          eventLogger = "EventLogger".equals(name);
50          this.name = name;
51      }
52  
53      public void trace(final String format) {
54          if (logger.isTraceEnabled()) {
55              logger.log(null, FQCN, Level.TRACE, new SimpleMessage(format), null);
56          }
57      }
58  
59      public void trace(final String format, final Object o) {
60          if (logger.isTraceEnabled()) {
61              logger.log(null, FQCN, Level.TRACE, new ParameterizedMessage(format, o), null);
62          }
63      }
64  
65      public void trace(final String format, final Object arg1, final Object arg2) {
66          if (logger.isTraceEnabled()) {
67              final ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
68              logger.log(null, FQCN, Level.TRACE, msg, msg.getThrowable());
69          }
70      }
71  
72      public void trace(final String format, final Object[] args) {
73          if (logger.isTraceEnabled()) {
74              final ParameterizedMessage msg = new ParameterizedMessage(format, args);
75              logger.log(null, FQCN, Level.TRACE, msg, msg.getThrowable());
76          }
77      }
78  
79      public void trace(final String format, final Throwable t) {
80          if (logger.isTraceEnabled()) {
81              logger.log(null, FQCN, Level.TRACE, new SimpleMessage(format), t);
82          }
83      }
84  
85      public boolean isTraceEnabled() {
86          return logger.isTraceEnabled();
87      }
88  
89      public boolean isTraceEnabled(final Marker marker) {
90          return logger.isTraceEnabled((org.apache.logging.log4j.Marker) marker);
91      }
92  
93      public void trace(final Marker marker, final String s) {
94          if (isTraceEnabled(marker)) {
95              logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE, new SimpleMessage(s), null);
96          }
97      }
98  
99      public void trace(final Marker marker, final String s, final Object o) {
100         if (isTraceEnabled(marker)) {
101             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE,
102                 new ParameterizedMessage(s, o), null);
103         }
104     }
105 
106     public void trace(final Marker marker, final String s, final Object o, final Object o1) {
107         if (isTraceEnabled(marker)) {
108             final ParameterizedMessage msg = new ParameterizedMessage(s, o, o1);
109             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE, msg, msg.getThrowable());
110         }
111     }
112 
113     public void trace(final Marker marker, final String s, final Object[] objects) {
114         if (isTraceEnabled(marker)) {
115             final ParameterizedMessage msg = new ParameterizedMessage(s, objects);
116             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE, msg, msg.getThrowable());
117         }
118     }
119 
120     public void trace(final Marker marker, final String s, final Throwable throwable) {
121         if (isTraceEnabled(marker)) {
122             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE,
123                 new SimpleMessage(s), throwable);
124         }
125     }
126 
127     public void debug(final String format) {
128         if (logger.isDebugEnabled()) {
129             logger.log(null, FQCN, Level.DEBUG, new SimpleMessage(format), null);
130         }
131     }
132 
133     public void debug(final String format, final Object o) {
134         if (logger.isDebugEnabled()) {
135             logger.log(null, FQCN, Level.DEBUG, new ParameterizedMessage(format, o), null);
136         }
137     }
138 
139     public void debug(final String format, final Object arg1, final Object arg2) {
140         if (logger.isDebugEnabled()) {
141             final ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
142             logger.log(null, FQCN, Level.DEBUG, msg, msg.getThrowable());
143         }
144     }
145 
146     public void debug(final String format, final Object[] args) {
147         if (logger.isDebugEnabled()) {
148             final ParameterizedMessage msg = new ParameterizedMessage(format, args);
149             logger.log(null, FQCN, Level.DEBUG, msg, msg.getThrowable());
150         }
151     }
152 
153     public void debug(final String format, final Throwable t) {
154         if (logger.isDebugEnabled()) {
155             logger.log(null, FQCN, Level.DEBUG, new SimpleMessage(format), t);
156         }
157     }
158 
159     public boolean isDebugEnabled() {
160         return logger.isDebugEnabled();
161     }
162 
163     public boolean isDebugEnabled(final Marker marker) {
164         return logger.isDebugEnabled((org.apache.logging.log4j.Marker) marker);
165     }
166 
167     public void debug(final Marker marker, final String s) {
168         if (isDebugEnabled(marker)) {
169             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG, new SimpleMessage(s), null);
170         }
171     }
172 
173     public void debug(final Marker marker, final String s, final Object o) {
174         if (isDebugEnabled(marker)) {
175             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG,
176                 new ParameterizedMessage(s, o), null);
177         }
178     }
179 
180     public void debug(final Marker marker, final String s, final Object o, final Object o1) {
181         if (isDebugEnabled(marker)) {
182             final ParameterizedMessage msg = new ParameterizedMessage(s, o, o1);
183             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG, msg, msg.getThrowable());
184         }
185     }
186 
187     public void debug(final Marker marker, final String s, final Object[] objects) {
188         if (isDebugEnabled(marker)) {
189             final ParameterizedMessage msg = new ParameterizedMessage(s, objects);
190             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG, msg, msg.getThrowable());
191         }
192     }
193 
194     public void debug(final Marker marker, final String s, final Throwable throwable) {
195         if (isDebugEnabled(marker)) {
196             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG,
197                 new SimpleMessage(s), throwable);
198         }
199     }
200 
201     public void info(final String format) {
202         if (logger.isInfoEnabled()) {
203             logger.log(null, FQCN, Level.INFO, new SimpleMessage(format), null);
204         }
205     }
206 
207     public void info(final String format, final Object o) {
208         if (logger.isInfoEnabled()) {
209             logger.log(null, FQCN, Level.INFO, new ParameterizedMessage(format, o), null);
210         }
211     }
212 
213     public void info(final String format, final Object arg1, final Object arg2) {
214         if (logger.isInfoEnabled()) {
215             final ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
216             logger.log(null, FQCN, Level.INFO, msg, msg.getThrowable());
217         }
218     }
219 
220     public void info(final String format, final Object[] args) {
221         if (logger.isInfoEnabled()) {
222             final ParameterizedMessage msg = new ParameterizedMessage(format, args);
223             logger.log(null, FQCN, Level.INFO, msg, msg.getThrowable());
224         }
225     }
226 
227     public void info(final String format, final Throwable t) {
228         if (logger.isInfoEnabled()) {
229             logger.log(null, FQCN, Level.INFO, new SimpleMessage(format), t);
230         }
231     }
232 
233     public boolean isInfoEnabled() {
234         return logger.isInfoEnabled();
235     }
236 
237     public boolean isInfoEnabled(final Marker marker) {
238         return logger.isInfoEnabled((org.apache.logging.log4j.Marker) marker);
239     }
240 
241     public void info(final Marker marker, final String s) {
242         if (isInfoEnabled(marker)) {
243             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO, new SimpleMessage(s), null);
244         }
245     }
246 
247     public void info(final Marker marker, final String s, final Object o) {
248         if (isInfoEnabled(marker)) {
249             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO,
250                 new ParameterizedMessage(s, o), null);
251         }
252     }
253 
254     public void info(final Marker marker, final String s, final Object o, final Object o1) {
255         if (isInfoEnabled(marker)) {
256             final ParameterizedMessage msg = new ParameterizedMessage(s, o, o1);
257             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO, msg, msg.getThrowable());
258         }
259     }
260 
261     public void info(final Marker marker, final String s, final Object[] objects) {
262         if (isInfoEnabled(marker)) {
263             final ParameterizedMessage msg = new ParameterizedMessage(s, objects);
264             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO, msg, msg.getThrowable());
265         }
266     }
267 
268     public void info(final Marker marker, final String s, final Throwable throwable) {
269         if (isInfoEnabled(marker)) {
270             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO,
271                 new SimpleMessage(s), throwable);
272         }
273     }
274 
275     public void warn(final String format) {
276         if (logger.isWarnEnabled()) {
277             logger.log(null, FQCN, Level.WARN, new SimpleMessage(format), null);
278         }
279     }
280 
281     public void warn(final String format, final Object o) {
282         if (logger.isWarnEnabled()) {
283             logger.log(null, FQCN, Level.WARN, new ParameterizedMessage(format, o), null);
284         }
285     }
286 
287     public void warn(final String format, final Object arg1, final Object arg2) {
288         if (logger.isWarnEnabled()) {
289             final ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
290             logger.log(null, FQCN, Level.WARN, msg, msg.getThrowable());
291         }
292     }
293 
294     public void warn(final String format, final Object[] args) {
295         if (logger.isWarnEnabled()) {
296             final ParameterizedMessage msg = new ParameterizedMessage(format, args);
297             logger.log(null, FQCN, Level.WARN, msg, msg.getThrowable());
298         }
299     }
300 
301     public void warn(final String format, final Throwable t) {
302         if (logger.isWarnEnabled()) {
303             logger.log(null, FQCN, Level.WARN, new SimpleMessage(format), t);
304         }
305     }
306 
307     public boolean isWarnEnabled() {
308         return logger.isWarnEnabled();
309     }
310 
311     public boolean isWarnEnabled(final Marker marker) {
312         return logger.isWarnEnabled((org.apache.logging.log4j.Marker) marker);
313     }
314 
315     public void warn(final Marker marker, final String s) {
316         if (isWarnEnabled(marker)) {
317             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN, new SimpleMessage(s), null);
318         }
319     }
320 
321     public void warn(final Marker marker, final String s, final Object o) {
322         if (isWarnEnabled(marker)) {
323             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN,
324                 new ParameterizedMessage(s, o), null);
325         }
326     }
327 
328     public void warn(final Marker marker, final String s, final Object o, final Object o1) {
329         if (isWarnEnabled(marker)) {
330             final ParameterizedMessage msg = new ParameterizedMessage(s, o, o1);
331             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN, msg, msg.getThrowable());
332         }
333     }
334 
335     public void warn(final Marker marker, final String s, final Object[] objects) {
336         if (isWarnEnabled(marker)) {
337             final ParameterizedMessage msg = new ParameterizedMessage(s, objects);
338             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN, msg, msg.getThrowable());
339         }
340     }
341 
342     public void warn(final Marker marker, final String s, final Throwable throwable) {
343         if (isWarnEnabled(marker)) {
344             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN,
345                 new SimpleMessage(s), throwable);
346         }
347     }
348 
349     public void error(final String format) {
350         if (logger.isErrorEnabled()) {
351             logger.log(null, FQCN, Level.ERROR, new SimpleMessage(format), null);
352         }
353     }
354 
355     public void error(final String format, final Object o) {
356         if (logger.isErrorEnabled()) {
357             logger.log(null, FQCN, Level.ERROR, new ParameterizedMessage(format, o), null);
358         }
359     }
360 
361     public void error(final String format, final Object arg1, final Object arg2) {
362         if (logger.isErrorEnabled()) {
363             final ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
364             logger.log(null, FQCN, Level.ERROR, msg, msg.getThrowable());
365         }
366     }
367 
368     public void error(final String format, final Object[] args) {
369         if (logger.isErrorEnabled()) {
370             final ParameterizedMessage msg = new ParameterizedMessage(format, args);
371             logger.log(null, FQCN, Level.ERROR, msg, msg.getThrowable());
372         }
373     }
374 
375     public void error(final String format, final Throwable t) {
376         if (logger.isErrorEnabled()) {
377             logger.log(null, FQCN, Level.ERROR, new SimpleMessage(format), t);
378         }
379     }
380 
381     public boolean isErrorEnabled() {
382         return logger.isErrorEnabled();
383     }
384 
385     public boolean isErrorEnabled(final Marker marker) {
386         return logger.isErrorEnabled((org.apache.logging.log4j.Marker) marker);
387     }
388 
389     public void error(final Marker marker, final String s) {
390         if (isErrorEnabled(marker)) {
391             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR, new SimpleMessage(s), null);
392         }
393     }
394 
395     public void error(final Marker marker, final String s, final Object o) {
396         if (isErrorEnabled(marker)) {
397             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR,
398                 new ParameterizedMessage(s, o), null);
399         }
400     }
401 
402     public void error(final Marker marker, final String s, final Object o, final Object o1) {
403         if (isErrorEnabled(marker)) {
404             final ParameterizedMessage msg = new ParameterizedMessage(s, o, o1);
405             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR, msg, msg.getThrowable());
406         }
407     }
408 
409     public void error(final Marker marker, final String s, final Object[] objects) {
410         if (isErrorEnabled(marker)) {
411             final ParameterizedMessage msg = new ParameterizedMessage(s, objects);
412             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR, msg, msg.getThrowable());
413         }
414     }
415 
416     public void error(final Marker marker, final String s, final Throwable throwable) {
417         if (isErrorEnabled(marker)) {
418             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR,
419                 new SimpleMessage(s), throwable);
420         }
421     }
422 
423 
424     public void log(final Marker marker, final String fqcn, final int i, final String s1, final Object[] objects,
425                     Throwable throwable) {
426         if (!logger.isEnabled(getLevel(i), (org.apache.logging.log4j.Marker) marker, s1)) {
427             return;
428         }
429         Message msg;
430         if (eventLogger && marker != null && marker.contains(EVENT_MARKER)) {
431             try {
432                 final EventData data = (objects != null && objects[0] instanceof EventData) ? (EventData) objects[0] :
433                     new EventData(s1);
434                 msg = new StructuredDataMessage(data.getEventId(), data.getMessage(), data.getEventType());
435                 for (final Map.Entry entry : data.getEventMap().entrySet()) {
436                     final String key = entry.getKey().toString();
437                     if (EventData.EVENT_TYPE.equals(key) || EventData.EVENT_ID.equals(key) ||
438                         EventData.EVENT_MESSAGE.equals(key)) {
439                         continue;
440                     }
441                     ((StructuredDataMessage) msg).put(entry.getKey().toString(), entry.getValue().toString());
442                 }
443             } catch (final Exception ex) {
444                 msg = new ParameterizedMessage(s1, objects, throwable);
445             }
446 
447        } else if (objects == null) {
448             msg = new SimpleMessage(s1);
449         } else {
450             msg = new ParameterizedMessage(s1, objects, throwable);
451             if (throwable != null) {
452                 throwable = ((ParameterizedMessage) msg).getThrowable();
453             }
454         }
455         logger.log((org.apache.logging.log4j.Marker) marker, fqcn, getLevel(i), msg, throwable);
456     }
457 
458     public String getName() {
459         return name;
460     }
461 
462     private Level getLevel(final int i) {
463 
464         switch (i) {
465             case TRACE_INT :
466                 return Level.TRACE;
467             case DEBUG_INT :
468                 return Level.DEBUG;
469             case INFO_INT :
470                 return Level.INFO;
471             case WARN_INT :
472                 return Level.WARN;
473             case ERROR_INT :
474                 return Level.ERROR;
475         }
476         return Level.ERROR;
477     }
478 }