1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.slf4j;
18
19 import java.io.IOException;
20 import java.io.ObjectInputStream;
21 import java.io.ObjectOutputStream;
22 import java.io.Serializable;
23
24 import org.apache.logging.log4j.Level;
25 import org.apache.logging.log4j.LogManager;
26 import org.apache.logging.log4j.message.Message;
27 import org.apache.logging.log4j.message.ParameterizedMessage;
28 import org.apache.logging.log4j.message.SimpleMessage;
29 import org.apache.logging.log4j.spi.ExtendedLogger;
30 import org.slf4j.Marker;
31 import org.slf4j.MarkerFactory;
32 import org.slf4j.impl.StaticMarkerBinder;
33 import org.slf4j.spi.LocationAwareLogger;
34
35
36
37
38 public class Log4jLogger implements LocationAwareLogger, Serializable {
39
40 public static final String FQCN = Log4jLogger.class.getName();
41
42 private static final long serialVersionUID = 7869000638091304316L;
43 private static final Marker EVENT_MARKER = MarkerFactory.getMarker("EVENT");
44 private final boolean eventLogger;
45 private transient ExtendedLogger logger;
46 private final String name;
47 private transient EventDataConverter converter;
48
49 public Log4jLogger(final ExtendedLogger logger, final String name) {
50 this.logger = logger;
51 this.eventLogger = "EventLogger".equals(name);
52 this.name = name;
53 this.converter = createConverter();
54 }
55
56 @Override
57 public void trace(final String format) {
58 logger.logIfEnabled(FQCN, Level.TRACE, null, format);
59 }
60
61 @Override
62 public void trace(final String format, final Object o) {
63 logger.logIfEnabled(FQCN, Level.TRACE, null, format, o);
64 }
65
66 @Override
67 public void trace(final String format, final Object arg1, final Object arg2) {
68 logger.logIfEnabled(FQCN, Level.TRACE, null, format, arg1, arg2);
69 }
70
71 @Override
72 public void trace(final String format, final Object... args) {
73 logger.logIfEnabled(FQCN, Level.TRACE, null, format, args);
74 }
75
76 @Override
77 public void trace(final String format, final Throwable t) {
78 logger.logIfEnabled(FQCN, Level.TRACE, null, format, t);
79 }
80
81 @Override
82 public boolean isTraceEnabled() {
83 return logger.isEnabled(Level.TRACE, null, null);
84 }
85
86 @Override
87 public boolean isTraceEnabled(final Marker marker) {
88 return logger.isEnabled(Level.TRACE, getMarker(marker), null);
89 }
90
91 @Override
92 public void trace(final Marker marker, final String s) {
93 logger.logIfEnabled(FQCN, Level.TRACE, getMarker(marker), s);
94 }
95
96 @Override
97 public void trace(final Marker marker, final String s, final Object o) {
98 logger.logIfEnabled(FQCN, Level.TRACE, getMarker(marker), s, o);
99 }
100
101 @Override
102 public void trace(final Marker marker, final String s, final Object o, final Object o1) {
103 logger.logIfEnabled(FQCN, Level.TRACE, getMarker(marker), s, o, o1);
104 }
105
106 @Override
107 public void trace(final Marker marker, final String s, final Object... objects) {
108 logger.logIfEnabled(FQCN, Level.TRACE, getMarker(marker), s, objects);
109 }
110
111 @Override
112 public void trace(final Marker marker, final String s, final Throwable throwable) {
113 logger.logIfEnabled(FQCN, Level.TRACE, getMarker(marker), s, throwable);
114 }
115
116 @Override
117 public void debug(final String format) {
118 logger.logIfEnabled(FQCN, Level.DEBUG, null, format);
119 }
120
121 @Override
122 public void debug(final String format, final Object o) {
123 logger.logIfEnabled(FQCN, Level.DEBUG, null, format, o);
124 }
125
126 @Override
127 public void debug(final String format, final Object arg1, final Object arg2) {
128 logger.logIfEnabled(FQCN, Level.DEBUG, null, format, arg1, arg2);
129 }
130
131 @Override
132 public void debug(final String format, final Object... args) {
133 logger.logIfEnabled(FQCN, Level.DEBUG, null, format, args);
134 }
135
136 @Override
137 public void debug(final String format, final Throwable t) {
138 logger.logIfEnabled(FQCN, Level.DEBUG, null, format, t);
139 }
140
141 @Override
142 public boolean isDebugEnabled() {
143 return logger.isEnabled(Level.DEBUG, null, null);
144 }
145
146 @Override
147 public boolean isDebugEnabled(final Marker marker) {
148 return logger.isEnabled(Level.DEBUG, getMarker(marker), null);
149 }
150
151 @Override
152 public void debug(final Marker marker, final String s) {
153 logger.logIfEnabled(FQCN, Level.DEBUG, getMarker(marker), s);
154 }
155
156 @Override
157 public void debug(final Marker marker, final String s, final Object o) {
158 logger.logIfEnabled(FQCN, Level.DEBUG, getMarker(marker), s, o);
159 }
160
161 @Override
162 public void debug(final Marker marker, final String s, final Object o, final Object o1) {
163 logger.logIfEnabled(FQCN, Level.DEBUG, getMarker(marker), s, o, o1);
164 }
165
166 @Override
167 public void debug(final Marker marker, final String s, final Object... objects) {
168 logger.logIfEnabled(FQCN, Level.DEBUG, getMarker(marker), s, objects);
169 }
170
171 @Override
172 public void debug(final Marker marker, final String s, final Throwable throwable) {
173 logger.logIfEnabled(FQCN, Level.DEBUG, getMarker(marker), s, throwable);
174 }
175
176 @Override
177 public void info(final String format) {
178 logger.logIfEnabled(FQCN, Level.INFO, null, format);
179 }
180
181 @Override
182 public void info(final String format, final Object o) {
183 logger.logIfEnabled(FQCN, Level.INFO, null, format, o);
184 }
185
186 @Override
187 public void info(final String format, final Object arg1, final Object arg2) {
188 logger.logIfEnabled(FQCN, Level.INFO, null, format, arg1, arg2);
189 }
190
191 @Override
192 public void info(final String format, final Object... args) {
193 logger.logIfEnabled(FQCN, Level.INFO, null, format, args);
194 }
195
196 @Override
197 public void info(final String format, final Throwable t) {
198 logger.logIfEnabled(FQCN, Level.INFO, null, format, t);
199 }
200
201 @Override
202 public boolean isInfoEnabled() {
203 return logger.isEnabled(Level.INFO, null, null);
204 }
205
206 @Override
207 public boolean isInfoEnabled(final Marker marker) {
208 return logger.isEnabled(Level.INFO, getMarker(marker), null);
209 }
210
211 @Override
212 public void info(final Marker marker, final String s) {
213 logger.logIfEnabled(FQCN, Level.INFO, getMarker(marker), s);
214 }
215
216 @Override
217 public void info(final Marker marker, final String s, final Object o) {
218 logger.logIfEnabled(FQCN, Level.INFO, getMarker(marker), s, o);
219 }
220
221 @Override
222 public void info(final Marker marker, final String s, final Object o, final Object o1) {
223 logger.logIfEnabled(FQCN, Level.INFO, getMarker(marker), s, o, o1);
224 }
225
226 @Override
227 public void info(final Marker marker, final String s, final Object... objects) {
228 logger.logIfEnabled(FQCN, Level.INFO, getMarker(marker), s, objects);
229 }
230
231 @Override
232 public void info(final Marker marker, final String s, final Throwable throwable) {
233 logger.logIfEnabled(FQCN, Level.INFO, getMarker(marker), s, throwable);
234 }
235
236 @Override
237 public void warn(final String format) {
238 logger.logIfEnabled(FQCN, Level.WARN, null, format);
239 }
240
241 @Override
242 public void warn(final String format, final Object o) {
243 logger.logIfEnabled(FQCN, Level.WARN, null, format, o);
244 }
245
246 @Override
247 public void warn(final String format, final Object arg1, final Object arg2) {
248 logger.logIfEnabled(FQCN, Level.WARN, null, format, arg1, arg2);
249 }
250
251 @Override
252 public void warn(final String format, final Object... args) {
253 logger.logIfEnabled(FQCN, Level.WARN, null, format, args);
254 }
255
256 @Override
257 public void warn(final String format, final Throwable t) {
258 logger.logIfEnabled(FQCN, Level.WARN, null, format, t);
259 }
260
261 @Override
262 public boolean isWarnEnabled() {
263 return logger.isEnabled(Level.WARN, null, null);
264 }
265
266 @Override
267 public boolean isWarnEnabled(final Marker marker) {
268 return logger.isEnabled(Level.WARN, getMarker(marker), null);
269 }
270
271 @Override
272 public void warn(final Marker marker, final String s) {
273 logger.logIfEnabled(FQCN, Level.WARN, getMarker(marker), s);
274 }
275
276 @Override
277 public void warn(final Marker marker, final String s, final Object o) {
278 logger.logIfEnabled(FQCN, Level.WARN, getMarker(marker), s, o);
279 }
280
281 @Override
282 public void warn(final Marker marker, final String s, final Object o, final Object o1) {
283 logger.logIfEnabled(FQCN, Level.WARN, getMarker(marker), s, o, o1);
284 }
285
286 @Override
287 public void warn(final Marker marker, final String s, final Object... objects) {
288 logger.logIfEnabled(FQCN, Level.WARN, getMarker(marker), s, objects);
289 }
290
291 @Override
292 public void warn(final Marker marker, final String s, final Throwable throwable) {
293 logger.logIfEnabled(FQCN, Level.WARN, getMarker(marker), s, throwable);
294 }
295
296 @Override
297 public void error(final String format) {
298 logger.logIfEnabled(FQCN, Level.ERROR, null, format);
299 }
300
301 @Override
302 public void error(final String format, final Object o) {
303 logger.logIfEnabled(FQCN, Level.ERROR, null, format, o);
304 }
305
306 @Override
307 public void error(final String format, final Object arg1, final Object arg2) {
308 logger.logIfEnabled(FQCN, Level.ERROR, null, format, arg1, arg2);
309 }
310
311 @Override
312 public void error(final String format, final Object... args) {
313 logger.logIfEnabled(FQCN, Level.ERROR, null, format, args);
314 }
315
316 @Override
317 public void error(final String format, final Throwable t) {
318 logger.logIfEnabled(FQCN, Level.ERROR, null, format, t);
319 }
320
321 @Override
322 public boolean isErrorEnabled() {
323 return logger.isEnabled(Level.ERROR, null, null);
324 }
325
326 @Override
327 public boolean isErrorEnabled(final Marker marker) {
328 return logger.isEnabled(Level.ERROR, getMarker(marker), null);
329 }
330
331 @Override
332 public void error(final Marker marker, final String s) {
333 logger.logIfEnabled(FQCN, Level.ERROR, getMarker(marker), s);
334 }
335
336 @Override
337 public void error(final Marker marker, final String s, final Object o) {
338 logger.logIfEnabled(FQCN, Level.ERROR, getMarker(marker), s, o);
339 }
340
341 @Override
342 public void error(final Marker marker, final String s, final Object o, final Object o1) {
343 logger.logIfEnabled(FQCN, Level.ERROR, getMarker(marker), s, o, o1);
344 }
345
346 @Override
347 public void error(final Marker marker, final String s, final Object... objects) {
348 logger.logIfEnabled(FQCN, Level.ERROR, getMarker(marker), s, objects);
349 }
350
351 @Override
352 public void error(final Marker marker, final String s, final Throwable throwable) {
353 logger.logIfEnabled(FQCN, Level.ERROR, getMarker(marker), s, throwable);
354 }
355
356 @Override
357 public void log(final Marker marker, final String fqcn, final int level, final String message, final Object[] params, Throwable throwable) {
358 final Level log4jLevel = getLevel(level);
359 final org.apache.logging.log4j.Marker log4jMarker = getMarker(marker);
360
361 if (!logger.isEnabled(log4jLevel, log4jMarker, message, params)) {
362 return;
363 }
364 final Message msg;
365 if (eventLogger && marker != null && marker.contains(EVENT_MARKER) && converter != null) {
366 msg = converter.convertEvent(message, params, throwable);
367 } else if (params == null) {
368 msg = new SimpleMessage(message);
369 } else {
370 msg = new ParameterizedMessage(message, params, throwable);
371 if (throwable != null) {
372 throwable = msg.getThrowable();
373 }
374 }
375 logger.logMessage(fqcn, log4jLevel, log4jMarker, msg, throwable);
376 }
377
378 private static org.apache.logging.log4j.Marker getMarker(final Marker marker) {
379 if (marker == null) {
380 return null;
381 } else if (marker instanceof Log4jMarker) {
382 return ((Log4jMarker) marker).getLog4jMarker();
383 } else {
384 final Log4jMarkerFactory factory = (Log4jMarkerFactory) StaticMarkerBinder.SINGLETON.getMarkerFactory();
385 return ((Log4jMarker) factory.getMarker(marker)).getLog4jMarker();
386 }
387 }
388
389 @Override
390 public String getName() {
391 return name;
392 }
393
394
395
396
397
398 private void readObject(final ObjectInputStream aInputStream) throws ClassNotFoundException, IOException {
399
400 aInputStream.defaultReadObject();
401 logger = LogManager.getContext().getLogger(name);
402 converter = createConverter();
403 }
404
405
406
407
408 private void writeObject(final ObjectOutputStream aOutputStream) throws IOException {
409
410 aOutputStream.defaultWriteObject();
411 }
412
413 private static EventDataConverter createConverter() {
414 try {
415 Class.forName("org.slf4j.ext.EventData");
416 return new EventDataConverter();
417 } catch (final ClassNotFoundException cnfe) {
418 return null;
419 }
420 }
421
422 private static Level getLevel(final int i) {
423 switch (i) {
424 case TRACE_INT:
425 return Level.TRACE;
426 case DEBUG_INT:
427 return Level.DEBUG;
428 case INFO_INT:
429 return Level.INFO;
430 case WARN_INT:
431 return Level.WARN;
432 case ERROR_INT:
433 return Level.ERROR;
434 }
435 return Level.ERROR;
436 }
437 }