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.message.Message;
21  import org.apache.logging.log4j.message.ParameterizedMessage;
22  import org.apache.logging.log4j.message.SimpleMessage;
23  import org.apache.logging.log4j.message.StructuredDataMessage;
24  import org.apache.logging.log4j.spi.AbstractLogger;
25  import org.apache.logging.log4j.spi.AbstractLoggerWrapper;
26  import org.slf4j.Marker;
27  import org.slf4j.MarkerFactory;
28  import org.slf4j.ext.EventData;
29  import org.slf4j.spi.LocationAwareLogger;
30  
31  import java.util.Map;
32  
33  /**
34   *
35   */
36  public class SLF4JLogger implements LocationAwareLogger {
37  
38      private static final String FQCN = SLF4JLogger.class.getName();
39      private static final Marker EVENT_MARKER = MarkerFactory.getMarker("EVENT");
40      private final boolean eventLogger;
41      private final AbstractLoggerWrapper logger;
42      private final String name;
43  
44      public SLF4JLogger(final AbstractLogger logger, final String name) {
45          this.logger = new AbstractLoggerWrapper(logger, name, null);
46          eventLogger = "EventLogger".equals(name);
47          this.name = name;
48      }
49  
50      @Override
51      public void trace(final String format) {
52          if (logger.isTraceEnabled()) {
53              logger.log(null, FQCN, Level.TRACE, new SimpleMessage(format), null);
54          }
55      }
56  
57      @Override
58      public void trace(final String format, final Object o) {
59          if (logger.isTraceEnabled()) {
60              logger.log(null, FQCN, Level.TRACE, new ParameterizedMessage(format, o), null);
61          }
62      }
63  
64      @Override
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      @Override
73      public void trace(final String format, final Object... args) {
74          if (logger.isTraceEnabled()) {
75              final ParameterizedMessage msg = new ParameterizedMessage(format, args);
76              logger.log(null, FQCN, Level.TRACE, msg, msg.getThrowable());
77          }
78      }
79  
80      @Override
81      public void trace(final String format, final Throwable t) {
82          if (logger.isTraceEnabled()) {
83              logger.log(null, FQCN, Level.TRACE, new SimpleMessage(format), t);
84          }
85      }
86  
87      @Override
88      public boolean isTraceEnabled() {
89          return logger.isTraceEnabled();
90      }
91  
92      @Override
93      public boolean isTraceEnabled(final Marker marker) {
94          return logger.isTraceEnabled((org.apache.logging.log4j.Marker) marker);
95      }
96  
97      @Override
98      public void trace(final Marker marker, final String s) {
99          if (isTraceEnabled(marker)) {
100             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE, new SimpleMessage(s), null);
101         }
102     }
103 
104     @Override
105     public void trace(final Marker marker, final String s, final Object o) {
106         if (isTraceEnabled(marker)) {
107             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE,
108                 new ParameterizedMessage(s, o), null);
109         }
110     }
111 
112     @Override
113     public void trace(final Marker marker, final String s, final Object o, final Object o1) {
114         if (isTraceEnabled(marker)) {
115             final ParameterizedMessage msg = new ParameterizedMessage(s, o, o1);
116             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE, msg, msg.getThrowable());
117         }
118     }
119 
120     @Override
121     public void trace(final Marker marker, final String s, final Object... objects) {
122         if (isTraceEnabled(marker)) {
123             final ParameterizedMessage msg = new ParameterizedMessage(s, objects);
124             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE, msg, msg.getThrowable());
125         }
126     }
127 
128     @Override
129     public void trace(final Marker marker, final String s, final Throwable throwable) {
130         if (isTraceEnabled(marker)) {
131             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE,
132                 new SimpleMessage(s), throwable);
133         }
134     }
135 
136     @Override
137     public void debug(final String format) {
138         if (logger.isDebugEnabled()) {
139             logger.log(null, FQCN, Level.DEBUG, new SimpleMessage(format), null);
140         }
141     }
142 
143     @Override
144     public void debug(final String format, final Object o) {
145         if (logger.isDebugEnabled()) {
146             logger.log(null, FQCN, Level.DEBUG, new ParameterizedMessage(format, o), null);
147         }
148     }
149 
150     @Override
151     public void debug(final String format, final Object arg1, final Object arg2) {
152         if (logger.isDebugEnabled()) {
153             final ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
154             logger.log(null, FQCN, Level.DEBUG, msg, msg.getThrowable());
155         }
156     }
157 
158     @Override
159     public void debug(final String format, final Object... args) {
160         if (logger.isDebugEnabled()) {
161             final ParameterizedMessage msg = new ParameterizedMessage(format, args);
162             logger.log(null, FQCN, Level.DEBUG, msg, msg.getThrowable());
163         }
164     }
165 
166     @Override
167     public void debug(final String format, final Throwable t) {
168         if (logger.isDebugEnabled()) {
169             logger.log(null, FQCN, Level.DEBUG, new SimpleMessage(format), t);
170         }
171     }
172 
173     @Override
174     public boolean isDebugEnabled() {
175         return logger.isDebugEnabled();
176     }
177 
178     @Override
179     public boolean isDebugEnabled(final Marker marker) {
180         return logger.isDebugEnabled((org.apache.logging.log4j.Marker) marker);
181     }
182 
183     @Override
184     public void debug(final Marker marker, final String s) {
185         if (isDebugEnabled(marker)) {
186             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG, new SimpleMessage(s), null);
187         }
188     }
189 
190     @Override
191     public void debug(final Marker marker, final String s, final Object o) {
192         if (isDebugEnabled(marker)) {
193             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG,
194                 new ParameterizedMessage(s, o), null);
195         }
196     }
197 
198     @Override
199     public void debug(final Marker marker, final String s, final Object o, final Object o1) {
200         if (isDebugEnabled(marker)) {
201             final ParameterizedMessage msg = new ParameterizedMessage(s, o, o1);
202             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG, msg, msg.getThrowable());
203         }
204     }
205 
206     @Override
207     public void debug(final Marker marker, final String s, final Object... objects) {
208         if (isDebugEnabled(marker)) {
209             final ParameterizedMessage msg = new ParameterizedMessage(s, objects);
210             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG, msg, msg.getThrowable());
211         }
212     }
213 
214     @Override
215     public void debug(final Marker marker, final String s, final Throwable throwable) {
216         if (isDebugEnabled(marker)) {
217             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG,
218                 new SimpleMessage(s), throwable);
219         }
220     }
221 
222     @Override
223     public void info(final String format) {
224         if (logger.isInfoEnabled()) {
225             logger.log(null, FQCN, Level.INFO, new SimpleMessage(format), null);
226         }
227     }
228 
229     @Override
230     public void info(final String format, final Object o) {
231         if (logger.isInfoEnabled()) {
232             logger.log(null, FQCN, Level.INFO, new ParameterizedMessage(format, o), null);
233         }
234     }
235 
236     @Override
237     public void info(final String format, final Object arg1, final Object arg2) {
238         if (logger.isInfoEnabled()) {
239             final ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
240             logger.log(null, FQCN, Level.INFO, msg, msg.getThrowable());
241         }
242     }
243 
244     @Override
245     public void info(final String format, final Object... args) {
246         if (logger.isInfoEnabled()) {
247             final ParameterizedMessage msg = new ParameterizedMessage(format, args);
248             logger.log(null, FQCN, Level.INFO, msg, msg.getThrowable());
249         }
250     }
251 
252     @Override
253     public void info(final String format, final Throwable t) {
254         if (logger.isInfoEnabled()) {
255             logger.log(null, FQCN, Level.INFO, new SimpleMessage(format), t);
256         }
257     }
258 
259     @Override
260     public boolean isInfoEnabled() {
261         return logger.isInfoEnabled();
262     }
263 
264     @Override
265     public boolean isInfoEnabled(final Marker marker) {
266         return logger.isInfoEnabled((org.apache.logging.log4j.Marker) marker);
267     }
268 
269     @Override
270     public void info(final Marker marker, final String s) {
271         if (isInfoEnabled(marker)) {
272             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO, new SimpleMessage(s), null);
273         }
274     }
275 
276     @Override
277     public void info(final Marker marker, final String s, final Object o) {
278         if (isInfoEnabled(marker)) {
279             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO,
280                 new ParameterizedMessage(s, o), null);
281         }
282     }
283 
284     @Override
285     public void info(final Marker marker, final String s, final Object o, final Object o1) {
286         if (isInfoEnabled(marker)) {
287             final ParameterizedMessage msg = new ParameterizedMessage(s, o, o1);
288             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO, msg, msg.getThrowable());
289         }
290     }
291 
292     @Override
293     public void info(final Marker marker, final String s, final Object... objects) {
294         if (isInfoEnabled(marker)) {
295             final ParameterizedMessage msg = new ParameterizedMessage(s, objects);
296             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO, msg, msg.getThrowable());
297         }
298     }
299 
300     @Override
301     public void info(final Marker marker, final String s, final Throwable throwable) {
302         if (isInfoEnabled(marker)) {
303             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO,
304                 new SimpleMessage(s), throwable);
305         }
306     }
307 
308     @Override
309     public void warn(final String format) {
310         if (logger.isWarnEnabled()) {
311             logger.log(null, FQCN, Level.WARN, new SimpleMessage(format), null);
312         }
313     }
314 
315     @Override
316     public void warn(final String format, final Object o) {
317         if (logger.isWarnEnabled()) {
318             logger.log(null, FQCN, Level.WARN, new ParameterizedMessage(format, o), null);
319         }
320     }
321 
322     @Override
323     public void warn(final String format, final Object arg1, final Object arg2) {
324         if (logger.isWarnEnabled()) {
325             final ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
326             logger.log(null, FQCN, Level.WARN, msg, msg.getThrowable());
327         }
328     }
329 
330     @Override
331     public void warn(final String format, final Object... args) {
332         if (logger.isWarnEnabled()) {
333             final ParameterizedMessage msg = new ParameterizedMessage(format, args);
334             logger.log(null, FQCN, Level.WARN, msg, msg.getThrowable());
335         }
336     }
337 
338     @Override
339     public void warn(final String format, final Throwable t) {
340         if (logger.isWarnEnabled()) {
341             logger.log(null, FQCN, Level.WARN, new SimpleMessage(format), t);
342         }
343     }
344 
345     @Override
346     public boolean isWarnEnabled() {
347         return logger.isWarnEnabled();
348     }
349 
350     @Override
351     public boolean isWarnEnabled(final Marker marker) {
352         return logger.isWarnEnabled((org.apache.logging.log4j.Marker) marker);
353     }
354 
355     @Override
356     public void warn(final Marker marker, final String s) {
357         if (isWarnEnabled(marker)) {
358             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN, new SimpleMessage(s), null);
359         }
360     }
361 
362     @Override
363     public void warn(final Marker marker, final String s, final Object o) {
364         if (isWarnEnabled(marker)) {
365             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN,
366                 new ParameterizedMessage(s, o), null);
367         }
368     }
369 
370     @Override
371     public void warn(final Marker marker, final String s, final Object o, final Object o1) {
372         if (isWarnEnabled(marker)) {
373             final ParameterizedMessage msg = new ParameterizedMessage(s, o, o1);
374             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN, msg, msg.getThrowable());
375         }
376     }
377 
378     @Override
379     public void warn(final Marker marker, final String s, final Object... objects) {
380         if (isWarnEnabled(marker)) {
381             final ParameterizedMessage msg = new ParameterizedMessage(s, objects);
382             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN, msg, msg.getThrowable());
383         }
384     }
385 
386     @Override
387     public void warn(final Marker marker, final String s, final Throwable throwable) {
388         if (isWarnEnabled(marker)) {
389             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN,
390                 new SimpleMessage(s), throwable);
391         }
392     }
393 
394     @Override
395     public void error(final String format) {
396         if (logger.isErrorEnabled()) {
397             logger.log(null, FQCN, Level.ERROR, new SimpleMessage(format), null);
398         }
399     }
400 
401     @Override
402     public void error(final String format, final Object o) {
403         if (logger.isErrorEnabled()) {
404             logger.log(null, FQCN, Level.ERROR, new ParameterizedMessage(format, o), null);
405         }
406     }
407 
408     @Override
409     public void error(final String format, final Object arg1, final Object arg2) {
410         if (logger.isErrorEnabled()) {
411             final ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
412             logger.log(null, FQCN, Level.ERROR, msg, msg.getThrowable());
413         }
414     }
415 
416     @Override
417     public void error(final String format, final Object... args) {
418         if (logger.isErrorEnabled()) {
419             final ParameterizedMessage msg = new ParameterizedMessage(format, args);
420             logger.log(null, FQCN, Level.ERROR, msg, msg.getThrowable());
421         }
422     }
423 
424     @Override
425     public void error(final String format, final Throwable t) {
426         if (logger.isErrorEnabled()) {
427             logger.log(null, FQCN, Level.ERROR, new SimpleMessage(format), t);
428         }
429     }
430 
431     @Override
432     public boolean isErrorEnabled() {
433         return logger.isErrorEnabled();
434     }
435 
436     @Override
437     public boolean isErrorEnabled(final Marker marker) {
438         return logger.isErrorEnabled((org.apache.logging.log4j.Marker) marker);
439     }
440 
441     @Override
442     public void error(final Marker marker, final String s) {
443         if (isErrorEnabled(marker)) {
444             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR, new SimpleMessage(s), null);
445         }
446     }
447 
448     @Override
449     public void error(final Marker marker, final String s, final Object o) {
450         if (isErrorEnabled(marker)) {
451             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR,
452                 new ParameterizedMessage(s, o), null);
453         }
454     }
455 
456     @Override
457     public void error(final Marker marker, final String s, final Object o, final Object o1) {
458         if (isErrorEnabled(marker)) {
459             final ParameterizedMessage msg = new ParameterizedMessage(s, o, o1);
460             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR, msg, msg.getThrowable());
461         }
462     }
463 
464     @Override
465     public void error(final Marker marker, final String s, final Object... objects) {
466         if (isErrorEnabled(marker)) {
467             final ParameterizedMessage msg = new ParameterizedMessage(s, objects);
468             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR, msg, msg.getThrowable());
469         }
470     }
471 
472     @Override
473     public void error(final Marker marker, final String s, final Throwable throwable) {
474         if (isErrorEnabled(marker)) {
475             logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR,
476                 new SimpleMessage(s), throwable);
477         }
478     }
479 
480 
481     @Override
482     public void log(final Marker marker, final String fqcn, final int i, final String s1, final Object[] objects,
483                     Throwable throwable) {
484         if (!logger.isEnabled(getLevel(i), (org.apache.logging.log4j.Marker) marker, s1)) {
485             return;
486         }
487         Message msg;
488         if (eventLogger && marker != null && marker.contains(EVENT_MARKER)) {
489             try {
490                 final EventData data = (objects != null && objects[0] instanceof EventData) ? (EventData) objects[0] :
491                     new EventData(s1);
492                 msg = new StructuredDataMessage(data.getEventId(), data.getMessage(), data.getEventType());
493                 for (final Map.Entry entry : data.getEventMap().entrySet()) {
494                     final String key = entry.getKey().toString();
495                     if (EventData.EVENT_TYPE.equals(key) || EventData.EVENT_ID.equals(key) ||
496                         EventData.EVENT_MESSAGE.equals(key)) {
497                         continue;
498                     }
499                     ((StructuredDataMessage) msg).put(entry.getKey().toString(), entry.getValue().toString());
500                 }
501             } catch (final Exception ex) {
502                 msg = new ParameterizedMessage(s1, objects, throwable);
503             }
504 
505        } else if (objects == null) {
506             msg = new SimpleMessage(s1);
507         } else {
508             msg = new ParameterizedMessage(s1, objects, throwable);
509             if (throwable != null) {
510                 throwable = msg.getThrowable();
511             }
512         }
513         logger.log((org.apache.logging.log4j.Marker) marker, fqcn, getLevel(i), msg, throwable);
514     }
515 
516     @Override
517     public String getName() {
518         return name;
519     }
520 
521     private Level getLevel(final int i) {
522 
523         switch (i) {
524             case TRACE_INT :
525                 return Level.TRACE;
526             case DEBUG_INT :
527                 return Level.DEBUG;
528             case INFO_INT :
529                 return Level.INFO;
530             case WARN_INT :
531                 return Level.WARN;
532             case ERROR_INT :
533                 return Level.ERROR;
534         }
535         return Level.ERROR;
536     }
537 }