1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.slf4j.impl;
26
27 import java.io.PrintStream;
28 import java.util.Date;
29
30 import org.slf4j.Logger;
31 import org.slf4j.event.LoggingEvent;
32 import org.slf4j.helpers.FormattingTuple;
33 import org.slf4j.helpers.MarkerIgnoringBase;
34 import org.slf4j.helpers.MessageFormatter;
35 import org.slf4j.spi.LocationAwareLogger;
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143 public class SimpleLogger extends MarkerIgnoringBase {
144
145 private static final long serialVersionUID = -632788891211436180L;
146
147 private static long START_TIME = System.currentTimeMillis();
148
149 protected static final int LOG_LEVEL_TRACE = LocationAwareLogger.TRACE_INT;
150 protected static final int LOG_LEVEL_DEBUG = LocationAwareLogger.DEBUG_INT;
151 protected static final int LOG_LEVEL_INFO = LocationAwareLogger.INFO_INT;
152 protected static final int LOG_LEVEL_WARN = LocationAwareLogger.WARN_INT;
153 protected static final int LOG_LEVEL_ERROR = LocationAwareLogger.ERROR_INT;
154
155
156
157 protected static final int LOG_LEVEL_OFF = LOG_LEVEL_ERROR + 10;
158
159 private static boolean INITIALIZED = false;
160 static final private SimpleLoggerConfiguration CONFIG_PARAMS = new SimpleLoggerConfiguration();
161
162 static void lazyInit() {
163 if (INITIALIZED) {
164 return;
165 }
166 INITIALIZED = true;
167 init();
168 }
169
170
171
172 static void init() {
173 CONFIG_PARAMS.init();
174 }
175
176
177 protected int currentLogLevel = LOG_LEVEL_INFO;
178
179 private transient String shortLogName = null;
180
181
182
183
184
185 public static final String SYSTEM_PREFIX = "org.slf4j.simpleLogger.";
186
187 public static final String LOG_KEY_PREFIX = SimpleLogger.SYSTEM_PREFIX + "log.";
188
189 public static final String CACHE_OUTPUT_STREAM_STRING_KEY = SimpleLogger.SYSTEM_PREFIX + "cacheOutputStream";
190
191 public static final String WARN_LEVEL_STRING_KEY = SimpleLogger.SYSTEM_PREFIX + "warnLevelString";
192
193 public static final String LEVEL_IN_BRACKETS_KEY = SimpleLogger.SYSTEM_PREFIX + "levelInBrackets";
194
195 public static final String LOG_FILE_KEY = SimpleLogger.SYSTEM_PREFIX + "logFile";
196
197 public static final String SHOW_SHORT_LOG_NAME_KEY = SimpleLogger.SYSTEM_PREFIX + "showShortLogName";
198
199 public static final String SHOW_LOG_NAME_KEY = SimpleLogger.SYSTEM_PREFIX + "showLogName";
200
201 public static final String SHOW_THREAD_NAME_KEY = SimpleLogger.SYSTEM_PREFIX + "showThreadName";
202
203 public static final String DATE_TIME_FORMAT_KEY = SimpleLogger.SYSTEM_PREFIX + "dateTimeFormat";
204
205 public static final String SHOW_DATE_TIME_KEY = SimpleLogger.SYSTEM_PREFIX + "showDateTime";
206
207 public static final String DEFAULT_LOG_LEVEL_KEY = SimpleLogger.SYSTEM_PREFIX + "defaultLogLevel";
208
209
210
211
212
213 SimpleLogger(String name) {
214 this.name = name;
215
216 String levelString = recursivelyComputeLevelString();
217 if (levelString != null) {
218 this.currentLogLevel = SimpleLoggerConfiguration.stringToLevel(levelString);
219 } else {
220 this.currentLogLevel = CONFIG_PARAMS.defaultLogLevel;
221 }
222 }
223
224 String recursivelyComputeLevelString() {
225 String tempName = name;
226 String levelString = null;
227 int indexOfLastDot = tempName.length();
228 while ((levelString == null) && (indexOfLastDot > -1)) {
229 tempName = tempName.substring(0, indexOfLastDot);
230 levelString = CONFIG_PARAMS.getStringProperty(SimpleLogger.LOG_KEY_PREFIX + tempName, null);
231 indexOfLastDot = String.valueOf(tempName).lastIndexOf(".");
232 }
233 return levelString;
234 }
235
236
237
238
239
240
241
242
243
244
245
246
247 private void log(int level, String message, Throwable t) {
248 if (!isLevelEnabled(level)) {
249 return;
250 }
251
252 StringBuilder buf = new StringBuilder(32);
253
254
255 if (CONFIG_PARAMS.showDateTime) {
256 if (CONFIG_PARAMS.dateFormatter != null) {
257 buf.append(getFormattedDate());
258 buf.append(' ');
259 } else {
260 buf.append(System.currentTimeMillis() - START_TIME);
261 buf.append(' ');
262 }
263 }
264
265
266 if (CONFIG_PARAMS.showThreadName) {
267 buf.append('[');
268 buf.append(Thread.currentThread().getName());
269 buf.append("] ");
270 }
271
272 if (CONFIG_PARAMS.levelInBrackets)
273 buf.append('[');
274
275
276 String levelStr = renderLevel(level);
277 buf.append(levelStr);
278 if (CONFIG_PARAMS.levelInBrackets)
279 buf.append(']');
280 buf.append(' ');
281
282
283 if (CONFIG_PARAMS.showShortLogName) {
284 if (shortLogName == null)
285 shortLogName = computeShortName();
286 buf.append(String.valueOf(shortLogName)).append(" - ");
287 } else if (CONFIG_PARAMS.showLogName) {
288 buf.append(String.valueOf(name)).append(" - ");
289 }
290
291
292 buf.append(message);
293
294 write(buf, t);
295
296 }
297
298 protected String renderLevel(int level) {
299 switch (level) {
300 case LOG_LEVEL_TRACE:
301 return "TRACE";
302 case LOG_LEVEL_DEBUG:
303 return ("DEBUG");
304 case LOG_LEVEL_INFO:
305 return "INFO";
306 case LOG_LEVEL_WARN:
307 return CONFIG_PARAMS.warnLevelString;
308 case LOG_LEVEL_ERROR:
309 return "ERROR";
310 }
311 throw new IllegalStateException("Unrecognized level [" + level + "]");
312 }
313
314
315
316
317
318
319
320
321 void write(StringBuilder buf, Throwable t) {
322 PrintStream targetStream = CONFIG_PARAMS.outputChoice.getTargetPrintStream();
323
324 synchronized (CONFIG_PARAMS) {
325 targetStream.println(buf.toString());
326 writeThrowable(t, targetStream);
327 targetStream.flush();
328 }
329
330 }
331
332 protected void writeThrowable(Throwable t, PrintStream targetStream) {
333 if (t != null) {
334 t.printStackTrace(targetStream);
335 }
336 }
337
338 private String getFormattedDate() {
339 Date now = new Date();
340 String dateText;
341 synchronized (CONFIG_PARAMS.dateFormatter) {
342 dateText = CONFIG_PARAMS.dateFormatter.format(now);
343 }
344 return dateText;
345 }
346
347 private String computeShortName() {
348 return name.substring(name.lastIndexOf(".") + 1);
349 }
350
351
352
353
354
355
356
357
358
359 private void formatAndLog(int level, String format, Object arg1, Object arg2) {
360 if (!isLevelEnabled(level)) {
361 return;
362 }
363 FormattingTuple tp = MessageFormatter.format(format, arg1, arg2);
364 log(level, tp.getMessage(), tp.getThrowable());
365 }
366
367
368
369
370
371
372
373
374
375 private void formatAndLog(int level, String format, Object... arguments) {
376 if (!isLevelEnabled(level)) {
377 return;
378 }
379 FormattingTuple tp = MessageFormatter.arrayFormat(format, arguments);
380 log(level, tp.getMessage(), tp.getThrowable());
381 }
382
383
384
385
386
387
388
389 protected boolean isLevelEnabled(int logLevel) {
390
391
392 return (logLevel >= currentLogLevel);
393 }
394
395
396 public boolean isTraceEnabled() {
397 return isLevelEnabled(LOG_LEVEL_TRACE);
398 }
399
400
401
402
403
404 public void trace(String msg) {
405 log(LOG_LEVEL_TRACE, msg, null);
406 }
407
408
409
410
411
412 public void trace(String format, Object param1) {
413 formatAndLog(LOG_LEVEL_TRACE, format, param1, null);
414 }
415
416
417
418
419
420 public void trace(String format, Object param1, Object param2) {
421 formatAndLog(LOG_LEVEL_TRACE, format, param1, param2);
422 }
423
424
425
426
427
428 public void trace(String format, Object... argArray) {
429 formatAndLog(LOG_LEVEL_TRACE, format, argArray);
430 }
431
432
433 public void trace(String msg, Throwable t) {
434 log(LOG_LEVEL_TRACE, msg, t);
435 }
436
437
438 public boolean isDebugEnabled() {
439 return isLevelEnabled(LOG_LEVEL_DEBUG);
440 }
441
442
443
444
445
446 public void debug(String msg) {
447 log(LOG_LEVEL_DEBUG, msg, null);
448 }
449
450
451
452
453
454 public void debug(String format, Object param1) {
455 formatAndLog(LOG_LEVEL_DEBUG, format, param1, null);
456 }
457
458
459
460
461
462 public void debug(String format, Object param1, Object param2) {
463 formatAndLog(LOG_LEVEL_DEBUG, format, param1, param2);
464 }
465
466
467
468
469
470 public void debug(String format, Object... argArray) {
471 formatAndLog(LOG_LEVEL_DEBUG, format, argArray);
472 }
473
474
475 public void debug(String msg, Throwable t) {
476 log(LOG_LEVEL_DEBUG, msg, t);
477 }
478
479
480 public boolean isInfoEnabled() {
481 return isLevelEnabled(LOG_LEVEL_INFO);
482 }
483
484
485
486
487
488 public void info(String msg) {
489 log(LOG_LEVEL_INFO, msg, null);
490 }
491
492
493
494
495
496 public void info(String format, Object arg) {
497 formatAndLog(LOG_LEVEL_INFO, format, arg, null);
498 }
499
500
501
502
503
504 public void info(String format, Object arg1, Object arg2) {
505 formatAndLog(LOG_LEVEL_INFO, format, arg1, arg2);
506 }
507
508
509
510
511
512 public void info(String format, Object... argArray) {
513 formatAndLog(LOG_LEVEL_INFO, format, argArray);
514 }
515
516
517 public void info(String msg, Throwable t) {
518 log(LOG_LEVEL_INFO, msg, t);
519 }
520
521
522 public boolean isWarnEnabled() {
523 return isLevelEnabled(LOG_LEVEL_WARN);
524 }
525
526
527
528
529
530 public void warn(String msg) {
531 log(LOG_LEVEL_WARN, msg, null);
532 }
533
534
535
536
537
538 public void warn(String format, Object arg) {
539 formatAndLog(LOG_LEVEL_WARN, format, arg, null);
540 }
541
542
543
544
545
546 public void warn(String format, Object arg1, Object arg2) {
547 formatAndLog(LOG_LEVEL_WARN, format, arg1, arg2);
548 }
549
550
551
552
553
554 public void warn(String format, Object... argArray) {
555 formatAndLog(LOG_LEVEL_WARN, format, argArray);
556 }
557
558
559 public void warn(String msg, Throwable t) {
560 log(LOG_LEVEL_WARN, msg, t);
561 }
562
563
564 public boolean isErrorEnabled() {
565 return isLevelEnabled(LOG_LEVEL_ERROR);
566 }
567
568
569
570
571
572 public void error(String msg) {
573 log(LOG_LEVEL_ERROR, msg, null);
574 }
575
576
577
578
579
580 public void error(String format, Object arg) {
581 formatAndLog(LOG_LEVEL_ERROR, format, arg, null);
582 }
583
584
585
586
587
588 public void error(String format, Object arg1, Object arg2) {
589 formatAndLog(LOG_LEVEL_ERROR, format, arg1, arg2);
590 }
591
592
593
594
595
596 public void error(String format, Object... argArray) {
597 formatAndLog(LOG_LEVEL_ERROR, format, argArray);
598 }
599
600
601 public void error(String msg, Throwable t) {
602 log(LOG_LEVEL_ERROR, msg, t);
603 }
604
605 public void log(LoggingEvent event) {
606 int levelInt = event.getLevel().toInt();
607
608 if (!isLevelEnabled(levelInt)) {
609 return;
610 }
611 FormattingTuple tp = MessageFormatter.arrayFormat(event.getMessage(), event.getArgumentArray(), event.getThrowable());
612 log(levelInt, tp.getMessage(), event.getThrowable());
613 }
614
615 }