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(AbstractLogger logger, String name) {
47          Logger l = LogManager.getLogger(name);
48          this.logger = new AbstractLoggerWrapper(logger, name);
49          eventLogger = "EventLogger".equals(name);
50          this.name = name;
51      }
52  
53      public void trace(String format) {
54          if (logger.isTraceEnabled()) {
55              logger.log(null, FQCN, Level.TRACE, new SimpleMessage(format), null);
56          }
57      }
58  
59      public void trace(String format, 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(String format, Object arg1, Object arg2) {
66          if (logger.isTraceEnabled()) {
67              ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
68              logger.log(null, FQCN, Level.TRACE, msg, msg.getThrowable());
69          }
70      }
71  
72      public void trace(String format, Object[] args) {
73          if (logger.isTraceEnabled()) {
74              ParameterizedMessage msg = new ParameterizedMessage(format, args);
75              logger.log(null, FQCN, Level.TRACE, msg, msg.getThrowable());
76          }
77      }
78  
79      public void trace(String format, 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(Marker marker) {
90          return logger.isTraceEnabled((org.apache.logging.log4j.Marker) marker);
91      }
92  
93      public void trace(Marker marker, 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(Marker marker, String s, 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(Marker marker, String s, Object o, Object o1) {
107         if (isTraceEnabled(marker)) {
108             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(Marker marker, String s, Object[] objects) {
114         if (isTraceEnabled(marker)) {
115             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(Marker marker, String s, 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(String format) {
128         if (logger.isDebugEnabled()) {
129             logger.log(null, FQCN, Level.DEBUG, new SimpleMessage(format), null);
130         }
131     }
132 
133     public void debug(String format, 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(String format, Object arg1, Object arg2) {
140         if (logger.isDebugEnabled()) {
141             ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
142             logger.log(null, FQCN, Level.DEBUG, msg, msg.getThrowable());
143         }
144     }
145 
146     public void debug(String format, Object[] args) {
147         if (logger.isDebugEnabled()) {
148             ParameterizedMessage msg = new ParameterizedMessage(format, args);
149             logger.log(null, FQCN, Level.DEBUG, msg, msg.getThrowable());
150         }
151     }
152 
153     public void debug(String format, 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(Marker marker) {
164         return logger.isDebugEnabled((org.apache.logging.log4j.Marker) marker);
165     }
166 
167     public void debug(Marker marker, 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(Marker marker, String s, 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(Marker marker, String s, Object o, Object o1) {
181         if (isDebugEnabled(marker)) {
182             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(Marker marker, String s, Object[] objects) {
188         if (isDebugEnabled(marker)) {
189             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(Marker marker, String s, 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(String format) {
202         if (logger.isInfoEnabled()) {
203             logger.log(null, FQCN, Level.INFO, new SimpleMessage(format), null);
204         }
205     }
206 
207     public void info(String format, 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(String format, Object arg1, Object arg2) {
214         if (logger.isInfoEnabled()) {
215             ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
216             logger.log(null, FQCN, Level.INFO, msg, msg.getThrowable());
217         }
218     }
219 
220     public void info(String format, Object[] args) {
221         if (logger.isInfoEnabled()) {
222             ParameterizedMessage msg = new ParameterizedMessage(format, args);
223             logger.log(null, FQCN, Level.INFO, msg, msg.getThrowable());
224         }
225     }
226 
227     public void info(String format, 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(Marker marker) {
238         return logger.isInfoEnabled((org.apache.logging.log4j.Marker) marker);
239     }
240 
241     public void info(Marker marker, 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(Marker marker, String s, 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(Marker marker, String s, Object o, Object o1) {
255         if (isInfoEnabled(marker)) {
256             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(Marker marker, String s, Object[] objects) {
262         if (isInfoEnabled(marker)) {
263             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(Marker marker, String s, 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(String format) {
276         if (logger.isWarnEnabled()) {
277             logger.log(null, FQCN, Level.WARN, new SimpleMessage(format), null);
278         }
279     }
280 
281     public void warn(String format, 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(String format, Object arg1, Object arg2) {
288         if (logger.isWarnEnabled()) {
289             ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
290             logger.log(null, FQCN, Level.WARN, msg, msg.getThrowable());
291         }
292     }
293 
294     public void warn(String format, Object[] args) {
295         if (logger.isWarnEnabled()) {
296             ParameterizedMessage msg = new ParameterizedMessage(format, args);
297             logger.log(null, FQCN, Level.WARN, msg, msg.getThrowable());
298         }
299     }
300 
301     public void warn(String format, 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(Marker marker) {
312         return logger.isWarnEnabled((org.apache.logging.log4j.Marker) marker);
313     }
314 
315     public void warn(Marker marker, 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(Marker marker, String s, 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(Marker marker, String s, Object o, Object o1) {
329         if (isWarnEnabled(marker)) {
330             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(Marker marker, String s, Object[] objects) {
336         if (isWarnEnabled(marker)) {
337             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(Marker marker, String s, 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(String format) {
350         if (logger.isErrorEnabled()) {
351             logger.log(null, FQCN, Level.ERROR, new SimpleMessage(format), null);
352         }
353     }
354 
355     public void error(String format, 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(String format, Object arg1, Object arg2) {
362         if (logger.isErrorEnabled()) {
363             ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
364             logger.log(null, FQCN, Level.ERROR, msg, msg.getThrowable());
365         }
366     }
367 
368     public void error(String format, Object[] args) {
369         if (logger.isErrorEnabled()) {
370             ParameterizedMessage msg = new ParameterizedMessage(format, args);
371             logger.log(null, FQCN, Level.ERROR, msg, msg.getThrowable());
372         }
373     }
374 
375     public void error(String format, 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(Marker marker) {
386         return logger.isErrorEnabled((org.apache.logging.log4j.Marker) marker);
387     }
388 
389     public void error(Marker marker, 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(Marker marker, String s, 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(Marker marker, String s, Object o, Object o1) {
403         if (isErrorEnabled(marker)) {
404             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(Marker marker, String s, Object[] objects) {
410         if (isErrorEnabled(marker)) {
411             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(Marker marker, String s, 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(Marker marker, String fqcn, int i, String s1, Object[] objects, Throwable throwable) {
425         Message msg;
426         if (eventLogger && marker != null && marker.contains(EVENT_MARKER)) {
427             try {
428                 EventData data = (objects != null && objects[0] instanceof EventData) ? (EventData) objects[0] :
429                     new EventData(s1);
430                 msg = new StructuredDataMessage(data.getEventId(), data.getMessage(), data.getEventType());
431                 for (Map.Entry entry : data.getEventMap().entrySet()) {
432                     String key = entry.getKey().toString();
433                     if (EventData.EVENT_TYPE.equals(key) || EventData.EVENT_ID.equals(key) ||
434                         EventData.EVENT_MESSAGE.equals(key)) {
435                         continue;
436                     }
437                     ((StructuredDataMessage) msg).put(entry.getKey().toString(), entry.getValue().toString());
438                 }
439             } catch (Exception ex) {
440                 msg = new ParameterizedMessage(s1, objects, throwable);
441             }
442 
443        } else if (objects == null) {
444             msg = new SimpleMessage(s1);
445         } else {
446             msg = new ParameterizedMessage(s1, objects, throwable);
447             if (throwable != null) {
448                 throwable = ((ParameterizedMessage) msg).getThrowable();
449             }
450         }
451         logger.log((org.apache.logging.log4j.Marker) marker, fqcn, getLevel(i), msg, throwable);
452     }
453 
454     public String getName() {
455         return name;
456     }
457 
458     private Level getLevel(int i) {
459 
460         switch (i) {
461             case TRACE_INT :
462                 return Level.TRACE;
463             case DEBUG_INT :
464                 return Level.DEBUG;
465             case INFO_INT :
466                 return Level.INFO;
467             case WARN_INT :
468                 return Level.WARN;
469             case ERROR_INT :
470                 return Level.ERROR;
471         }
472         return Level.ERROR;
473     }
474 }