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