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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 package org.slf4j.impl;
46
47 import info.ronjenkins.slf4bukkit.ColorMapper;
48 import info.ronjenkins.slf4bukkit.ColorMarker;
49
50 import java.io.IOException;
51 import java.io.InputStream;
52 import java.util.ArrayList;
53 import java.util.Arrays;
54 import java.util.HashMap;
55 import java.util.List;
56 import java.util.Map;
57
58 import org.apache.commons.lang.exception.ExceptionUtils;
59 import org.bukkit.Bukkit;
60 import org.bukkit.ChatColor;
61 import org.bukkit.configuration.ConfigurationSection;
62 import org.bukkit.plugin.Plugin;
63 import org.slf4j.Logger;
64 import org.slf4j.Marker;
65 import org.slf4j.event.Level;
66 import org.slf4j.helpers.FormattingTuple;
67 import org.slf4j.helpers.MessageFormatter;
68 import org.yaml.snakeyaml.Yaml;
69
70 import com.google.common.collect.ImmutableMap;
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190 public final class BukkitLoggerAdapter implements Logger {
191
192
193 private static transient Plugin BUKKIT_PLUGIN;
194 private static transient String BUKKIT_PLUGIN_NAME;
195
196 private static final String CONFIG_FALLBACK_DEFAULT_LOG_LEVEL = "info";
197 private static final Map<Level, ColorMarker> CONFIG_FALLBACK_LEVEL_COLORS = BukkitLoggerAdapter.fallbackLevelColors();
198 private static final boolean CONFIG_FALLBACK_SHOW_HEADER = false;
199 private static final boolean CONFIG_FALLBACK_SHOW_LOG_NAME = false;
200 private static final boolean CONFIG_FALLBACK_SHOW_SHORT_LOG_NAME = true;
201 private static final boolean CONFIG_FALLBACK_SHOW_THREAD_NAME = false;
202 private static final String CONFIG_KEY_DEFAULT_LOG_LEVEL = "slf4j.defaultLogLevel";
203 private static final String CONFIG_KEY_LEVEL_COLORS = "slf4j.colors";
204 private static final String CONFIG_KEY_PREFIX_LOG = "slf4j.log.";
205 private static final String CONFIG_KEY_SHOW_HEADER = "slf4j.showHeader";
206 private static final String CONFIG_KEY_SHOW_LOG_NAME = "slf4j.showLogName";
207 private static final String CONFIG_KEY_SHOW_SHORT_LOG_NAME = "slf4j.showShortLogName";
208 private static final String CONFIG_KEY_SHOW_THREAD_NAME = "slf4j.showThreadName";
209 private static Level CONFIG_VALUE_DEFAULT_LOG_LEVEL;
210 private static Map<Level, ColorMarker> CONFIG_VALUE_LEVEL_COLORS;
211 private static boolean CONFIG_VALUE_SHOW_HEADER;
212 private static boolean CONFIG_VALUE_SHOW_LOG_NAME;
213 private static boolean CONFIG_VALUE_SHOW_SHORT_LOG_NAME;
214 private static boolean CONFIG_VALUE_SHOW_THREAD_NAME;
215
216 private static final Object INITIALIZATION_LOCK = new Object();
217
218 private final String name;
219
220 private transient String shortLogName = null;
221
222
223
224 BukkitLoggerAdapter(final String name) {
225 this.name = name;
226 }
227
228
229
230
231
232
233
234
235
236 public static void init(final boolean reinitialize) {
237 synchronized (BukkitLoggerAdapter.INITIALIZATION_LOCK) {
238
239 if (reinitialize) {
240 BukkitLoggerAdapter.BUKKIT_PLUGIN = null;
241 BukkitLoggerAdapter.BUKKIT_PLUGIN_NAME = null;
242 } else if (BukkitLoggerAdapter.BUKKIT_PLUGIN != null) { return; }
243
244 if (BukkitLoggerAdapter.BUKKIT_PLUGIN_NAME == null) {
245 InputStream pluginYmlFile = null;
246 try {
247 pluginYmlFile = BukkitLoggerAdapter.class.getClassLoader()
248 .getResource("plugin.yml")
249 .openStream();
250 final Yaml yaml = new Yaml();
251 @SuppressWarnings("rawtypes")
252 final Map pluginYml = (Map) yaml.load(pluginYmlFile);
253 BukkitLoggerAdapter.BUKKIT_PLUGIN_NAME = (String) pluginYml.get("name");
254 } catch (final IOException e) {
255 throw new IllegalStateException(e);
256 } finally {
257 if (pluginYmlFile != null) {
258 try {
259 pluginYmlFile.close();
260 } catch (final IOException e) {
261 e.printStackTrace();
262 }
263 }
264 }
265 }
266
267
268
269
270 BukkitLoggerAdapter.BUKKIT_PLUGIN = Bukkit.getPluginManager()
271 .getPlugin(BukkitLoggerAdapter.BUKKIT_PLUGIN_NAME);
272
273
274
275
276
277 BukkitLoggerAdapter.CONFIG_VALUE_DEFAULT_LOG_LEVEL = BukkitLoggerAdapter.stringToLevel(BukkitLoggerAdapter.getStringProperty(BukkitLoggerAdapter.CONFIG_KEY_DEFAULT_LOG_LEVEL,
278 BukkitLoggerAdapter.CONFIG_FALLBACK_DEFAULT_LOG_LEVEL));
279 if (BukkitLoggerAdapter.CONFIG_VALUE_DEFAULT_LOG_LEVEL == null) {
280 BukkitLoggerAdapter.CONFIG_VALUE_DEFAULT_LOG_LEVEL = BukkitLoggerAdapter.stringToLevel(BukkitLoggerAdapter.CONFIG_FALLBACK_DEFAULT_LOG_LEVEL);
281 }
282 BukkitLoggerAdapter.CONFIG_VALUE_LEVEL_COLORS = BukkitLoggerAdapter.getLevelColorsMap(BukkitLoggerAdapter.CONFIG_KEY_LEVEL_COLORS,
283 BukkitLoggerAdapter.CONFIG_FALLBACK_LEVEL_COLORS);
284 BukkitLoggerAdapter.CONFIG_VALUE_SHOW_HEADER = BukkitLoggerAdapter.getBooleanProperty(BukkitLoggerAdapter.CONFIG_KEY_SHOW_HEADER,
285 BukkitLoggerAdapter.CONFIG_FALLBACK_SHOW_HEADER);
286 BukkitLoggerAdapter.CONFIG_VALUE_SHOW_LOG_NAME = BukkitLoggerAdapter.getBooleanProperty(BukkitLoggerAdapter.CONFIG_KEY_SHOW_LOG_NAME,
287 BukkitLoggerAdapter.CONFIG_FALLBACK_SHOW_LOG_NAME);
288 BukkitLoggerAdapter.CONFIG_VALUE_SHOW_SHORT_LOG_NAME = BukkitLoggerAdapter.getBooleanProperty(BukkitLoggerAdapter.CONFIG_KEY_SHOW_SHORT_LOG_NAME,
289 BukkitLoggerAdapter.CONFIG_FALLBACK_SHOW_SHORT_LOG_NAME);
290 BukkitLoggerAdapter.CONFIG_VALUE_SHOW_THREAD_NAME = BukkitLoggerAdapter.getBooleanProperty(BukkitLoggerAdapter.CONFIG_KEY_SHOW_THREAD_NAME,
291 BukkitLoggerAdapter.CONFIG_FALLBACK_SHOW_THREAD_NAME);
292 }
293 }
294
295
296
297
298
299
300 private static Map<Level, ColorMarker> fallbackLevelColors() {
301 return ImmutableMap.<Level, ColorMarker> builder()
302 .put(Level.ERROR, ColorMarker.RED)
303 .put(Level.WARN, ColorMarker.YELLOW)
304 .put(Level.INFO, ColorMarker.NONE)
305 .put(Level.DEBUG, ColorMarker.NONE)
306 .put(Level.TRACE, ColorMarker.NONE).build();
307 }
308
309
310
311
312
313
314
315
316
317
318
319
320
321 private static boolean getBooleanProperty(final String name,
322 final boolean defaultValue) {
323 synchronized (BukkitLoggerAdapter.INITIALIZATION_LOCK) {
324 if (BukkitLoggerAdapter.BUKKIT_PLUGIN == null) { return defaultValue; }
325 final String prop = BukkitLoggerAdapter.BUKKIT_PLUGIN.getConfig()
326 .getString(name);
327 if ("true".equalsIgnoreCase(prop)) { return true; }
328 if ("false".equalsIgnoreCase(prop)) { return false; }
329 return defaultValue;
330 }
331 }
332
333
334
335
336
337
338
339 private static java.util.logging.Logger getBukkitLogger() {
340 synchronized (BukkitLoggerAdapter.INITIALIZATION_LOCK) {
341 return BukkitLoggerAdapter.BUKKIT_PLUGIN == null ? Bukkit.getLogger()
342 : BukkitLoggerAdapter.BUKKIT_PLUGIN.getLogger();
343 }
344 }
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361 private static Map<Level, ColorMarker>
362 getLevelColorsMap(final String property,
363 final Map<Level, ColorMarker> defaultValues) {
364 synchronized (BukkitLoggerAdapter.INITIALIZATION_LOCK) {
365
366 if (BukkitLoggerAdapter.BUKKIT_PLUGIN == null) { return defaultValues; }
367 final ConfigurationSection config = BukkitLoggerAdapter.BUKKIT_PLUGIN.getConfig()
368 .getConfigurationSection(property);
369
370 if (config == null) { return defaultValues; }
371
372 final Map<String, Object> configValues = config.getValues(false);
373 final Map<Level, ColorMarker> convertedConfigValues = new HashMap<Level, ColorMarker>();
374 for (final Map.Entry<String, Object> configValue : configValues.entrySet()) {
375 final String levelName = configValue.getKey().toUpperCase();
376 final String formatName = configValue.getValue().toString()
377 .toUpperCase();
378 Level level;
379 ColorMarker format;
380 try {
381 level = Level.valueOf(levelName);
382 format = ColorMarker.valueOf(formatName);
383 } catch (final IllegalArgumentException e) {
384
385 continue;
386 }
387 convertedConfigValues.put(level, format);
388 }
389
390 final Map<Level, ColorMarker> finalConfigValues = new HashMap<Level, ColorMarker>();
391 finalConfigValues.putAll(defaultValues);
392 finalConfigValues.putAll(convertedConfigValues);
393
394 return ImmutableMap.<Level, ColorMarker> builder()
395 .putAll(finalConfigValues).build();
396 }
397 }
398
399
400
401
402
403
404
405
406
407
408
409 private static String getStringProperty(final String name,
410 final String defaultValue) {
411 synchronized (BukkitLoggerAdapter.INITIALIZATION_LOCK) {
412 if (BukkitLoggerAdapter.BUKKIT_PLUGIN == null) { return defaultValue; }
413 final String prop = BukkitLoggerAdapter.BUKKIT_PLUGIN.getConfig()
414 .getString(name);
415 return (prop == null) ? defaultValue : prop;
416 }
417 }
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433 private static java.util.logging.Level
434 slf4jLevelIntToBukkitJULLevel(final Level slf4jLevel) {
435 java.util.logging.Level julLevel;
436 switch (slf4jLevel) {
437 case ERROR:
438 julLevel = java.util.logging.Level.SEVERE;
439 break;
440 case WARN:
441 julLevel = java.util.logging.Level.WARNING;
442 break;
443 default:
444
445
446
447 julLevel = java.util.logging.Level.INFO;
448 break;
449 }
450 return julLevel;
451 }
452
453
454
455
456
457
458
459
460
461 private static Level stringToLevel(final String levelStr) {
462 if ("trace".equalsIgnoreCase(levelStr)) {
463 return Level.TRACE;
464 } else if ("debug".equalsIgnoreCase(levelStr)) {
465 return Level.DEBUG;
466 } else if ("info".equalsIgnoreCase(levelStr)) {
467 return Level.INFO;
468 } else if ("warn".equalsIgnoreCase(levelStr)) {
469 return Level.WARN;
470 } else if ("error".equalsIgnoreCase(levelStr)) {
471 return Level.ERROR;
472 } else {
473 return null;
474 }
475 }
476
477 @Override
478 public void debug(final Marker marker, final String msg) {
479 if (!this.isDebugEnabled()) { return; }
480 this.log(Level.DEBUG, marker, msg, null);
481 }
482
483 @Override
484 public void debug(final Marker marker, final String format, final Object arg) {
485 if (!this.isDebugEnabled()) { return; }
486 this.formatAndLog(Level.DEBUG, marker, format, arg, null);
487 }
488
489 @Override
490 public void debug(final Marker marker, final String format,
491 final Object... arguments) {
492 if (!this.isDebugEnabled()) { return; }
493 this.formatAndLog(Level.DEBUG, marker, format, arguments);
494 }
495
496 @Override
497 public void debug(final Marker marker, final String format,
498 final Object arg1, final Object arg2) {
499 if (!this.isDebugEnabled()) { return; }
500 this.formatAndLog(Level.DEBUG, marker, format, arg1, arg2);
501 }
502
503 @Override
504 public void debug(final Marker marker, final String msg, final Throwable t) {
505 if (!this.isDebugEnabled()) { return; }
506 this.log(Level.DEBUG, marker, msg, t);
507 }
508
509 @Override
510 public void debug(final String msg) {
511 if (!this.isDebugEnabled()) { return; }
512 this.log(Level.DEBUG, null, msg, null);
513 }
514
515 @Override
516 public void debug(final String format, final Object arg) {
517 if (!this.isDebugEnabled()) { return; }
518 this.formatAndLog(Level.DEBUG, null, format, arg, null);
519 }
520
521 @Override
522 public void debug(final String format, final Object... arguments) {
523 if (!this.isDebugEnabled()) { return; }
524 this.formatAndLog(Level.DEBUG, null, format, arguments);
525 }
526
527 @Override
528 public void debug(final String format, final Object arg1, final Object arg2) {
529 if (!this.isDebugEnabled()) { return; }
530 this.formatAndLog(Level.DEBUG, null, format, arg1, arg2);
531 }
532
533 @Override
534 public void debug(final String msg, final Throwable t) {
535 if (!this.isDebugEnabled()) { return; }
536 this.log(Level.DEBUG, null, msg, t);
537 }
538
539 @Override
540 public void error(final Marker marker, final String msg) {
541 if (!this.isErrorEnabled()) { return; }
542 this.log(Level.ERROR, marker, msg, null);
543 }
544
545 @Override
546 public void error(final Marker marker, final String format, final Object arg) {
547 if (!this.isErrorEnabled()) { return; }
548 this.formatAndLog(Level.ERROR, marker, format, arg, null);
549 }
550
551 @Override
552 public void error(final Marker marker, final String format,
553 final Object... arguments) {
554 if (!this.isErrorEnabled()) { return; }
555 this.formatAndLog(Level.ERROR, marker, format, arguments);
556 }
557
558 @Override
559 public void error(final Marker marker, final String format,
560 final Object arg1, final Object arg2) {
561 if (!this.isErrorEnabled()) { return; }
562 this.formatAndLog(Level.ERROR, marker, format, arg1, arg2);
563 }
564
565 @Override
566 public void error(final Marker marker, final String msg, final Throwable t) {
567 if (!this.isErrorEnabled()) { return; }
568 this.log(Level.ERROR, marker, msg, t);
569 }
570
571 @Override
572 public void error(final String msg) {
573 if (!this.isErrorEnabled()) { return; }
574 this.log(Level.ERROR, null, msg, null);
575 }
576
577 @Override
578 public void error(final String format, final Object arg) {
579 if (!this.isErrorEnabled()) { return; }
580 this.formatAndLog(Level.ERROR, null, format, arg, null);
581 }
582
583 @Override
584 public void error(final String format, final Object... arguments) {
585 if (!this.isErrorEnabled()) { return; }
586 this.formatAndLog(Level.ERROR, null, format, arguments);
587 }
588
589 @Override
590 public void error(final String format, final Object arg1, final Object arg2) {
591 if (!this.isErrorEnabled()) { return; }
592 this.formatAndLog(Level.ERROR, null, format, arg1, arg2);
593 }
594
595 @Override
596 public void error(final String msg, final Throwable t) {
597 if (!this.isErrorEnabled()) { return; }
598 this.log(Level.ERROR, null, msg, t);
599 }
600
601 @Override
602 public String getName() {
603 return this.name;
604 }
605
606 @Override
607 public void info(final Marker marker, final String msg) {
608 if (!this.isInfoEnabled()) { return; }
609 this.log(Level.INFO, marker, msg, null);
610 }
611
612 @Override
613 public void info(final Marker marker, final String format, final Object arg) {
614 if (!this.isInfoEnabled()) { return; }
615 this.formatAndLog(Level.INFO, marker, format, arg, null);
616 }
617
618 @Override
619 public void info(final Marker marker, final String format,
620 final Object... arguments) {
621 if (!this.isInfoEnabled()) { return; }
622 this.formatAndLog(Level.INFO, marker, format, arguments);
623 }
624
625 @Override
626 public void info(final Marker marker, final String format, final Object arg1,
627 final Object arg2) {
628 if (!this.isInfoEnabled()) { return; }
629 this.formatAndLog(Level.INFO, marker, format, arg1, arg2);
630 }
631
632 @Override
633 public void info(final Marker marker, final String msg, final Throwable t) {
634 if (!this.isInfoEnabled()) { return; }
635 this.log(Level.INFO, marker, msg, t);
636 }
637
638 @Override
639 public void info(final String msg) {
640 if (!this.isInfoEnabled()) { return; }
641 this.log(Level.INFO, null, msg, null);
642 }
643
644 @Override
645 public void info(final String format, final Object arg) {
646 if (!this.isInfoEnabled()) { return; }
647 this.formatAndLog(Level.INFO, null, format, arg, null);
648 }
649
650 @Override
651 public void info(final String format, final Object... arguments) {
652 if (!this.isInfoEnabled()) { return; }
653 this.formatAndLog(Level.INFO, null, format, arguments);
654 }
655
656 @Override
657 public void info(final String format, final Object arg1, final Object arg2) {
658 if (!this.isInfoEnabled()) { return; }
659 this.formatAndLog(Level.INFO, null, format, arg1, arg2);
660 }
661
662 @Override
663 public void info(final String msg, final Throwable t) {
664 if (!this.isInfoEnabled()) { return; }
665 this.log(Level.INFO, null, msg, t);
666 }
667
668 @Override
669 public boolean isDebugEnabled() {
670 return this.isLevelEnabled(Level.DEBUG);
671 }
672
673 @Override
674 public boolean isDebugEnabled(final Marker marker) {
675 return this.isLevelEnabled(Level.DEBUG);
676 }
677
678 @Override
679 public boolean isErrorEnabled() {
680 return this.isLevelEnabled(Level.ERROR);
681 }
682
683 @Override
684 public boolean isErrorEnabled(final Marker marker) {
685 return this.isLevelEnabled(Level.ERROR);
686 }
687
688 @Override
689 public boolean isInfoEnabled() {
690 return this.isLevelEnabled(Level.INFO);
691 }
692
693 @Override
694 public boolean isInfoEnabled(final Marker marker) {
695 return this.isLevelEnabled(Level.INFO);
696 }
697
698 @Override
699 public boolean isTraceEnabled() {
700 return this.isLevelEnabled(Level.TRACE);
701 }
702
703 @Override
704 public boolean isTraceEnabled(final Marker marker) {
705 return this.isLevelEnabled(Level.TRACE);
706 }
707
708 @Override
709 public boolean isWarnEnabled() {
710 return this.isLevelEnabled(Level.WARN);
711 }
712
713 @Override
714 public boolean isWarnEnabled(final Marker marker) {
715 return this.isLevelEnabled(Level.WARN);
716 }
717
718 @Override
719 public void trace(final Marker marker, final String msg) {
720 if (!this.isTraceEnabled()) { return; }
721 this.log(Level.TRACE, marker, msg, null);
722 }
723
724 @Override
725 public void trace(final Marker marker, final String format, final Object arg) {
726 if (!this.isTraceEnabled()) { return; }
727 this.formatAndLog(Level.TRACE, marker, format, arg, null);
728 }
729
730 @Override
731 public void trace(final Marker marker, final String format,
732 final Object... arguments) {
733 if (!this.isTraceEnabled()) { return; }
734 this.formatAndLog(Level.TRACE, marker, format, arguments);
735 }
736
737 @Override
738 public void trace(final Marker marker, final String format,
739 final Object arg1, final Object arg2) {
740 if (!this.isTraceEnabled()) { return; }
741 this.formatAndLog(Level.TRACE, marker, format, arg1, arg2);
742 }
743
744 @Override
745 public void trace(final Marker marker, final String msg, final Throwable t) {
746 if (!this.isTraceEnabled()) { return; }
747 this.log(Level.TRACE, marker, msg, t);
748 }
749
750 @Override
751 public void trace(final String msg) {
752 if (!this.isTraceEnabled()) { return; }
753 this.log(Level.TRACE, null, msg, null);
754 }
755
756 @Override
757 public void trace(final String format, final Object arg) {
758 if (!this.isTraceEnabled()) { return; }
759 this.formatAndLog(Level.TRACE, null, format, arg, null);
760 }
761
762 @Override
763 public void trace(final String format, final Object... arguments) {
764 if (!this.isTraceEnabled()) { return; }
765 this.formatAndLog(Level.TRACE, null, format, arguments);
766 }
767
768 @Override
769 public void trace(final String format, final Object arg1, final Object arg2) {
770 if (!this.isTraceEnabled()) { return; }
771 this.formatAndLog(Level.TRACE, null, format, arg1, arg2);
772 }
773
774 @Override
775 public void trace(final String msg, final Throwable t) {
776 if (!this.isTraceEnabled()) { return; }
777 this.log(Level.TRACE, null, msg, t);
778 }
779
780 @Override
781 public void warn(final Marker marker, final String msg) {
782 if (!this.isWarnEnabled()) { return; }
783 this.log(Level.WARN, marker, msg, null);
784 }
785
786 @Override
787 public void warn(final Marker marker, final String format, final Object arg) {
788 if (!this.isWarnEnabled()) { return; }
789 this.formatAndLog(Level.WARN, marker, format, arg, null);
790 }
791
792 @Override
793 public void warn(final Marker marker, final String format,
794 final Object... arguments) {
795 if (!this.isWarnEnabled()) { return; }
796 this.formatAndLog(Level.WARN, marker, format, arguments);
797 }
798
799 @Override
800 public void warn(final Marker marker, final String format, final Object arg1,
801 final Object arg2) {
802 if (!this.isWarnEnabled()) { return; }
803 this.formatAndLog(Level.WARN, marker, format, arg1, arg2);
804 }
805
806 @Override
807 public void warn(final Marker marker, final String msg, final Throwable t) {
808 if (!this.isWarnEnabled()) { return; }
809 this.log(Level.WARN, marker, msg, t);
810 }
811
812 @Override
813 public void warn(final String msg) {
814 if (!this.isWarnEnabled()) { return; }
815 this.log(Level.WARN, null, msg, null);
816 }
817
818 @Override
819 public void warn(final String format, final Object arg) {
820 if (!this.isWarnEnabled()) { return; }
821 this.formatAndLog(Level.WARN, null, format, arg, null);
822 }
823
824 @Override
825 public void warn(final String format, final Object... arguments) {
826 if (!this.isWarnEnabled()) { return; }
827 this.formatAndLog(Level.WARN, null, format, arguments);
828 }
829
830 @Override
831 public void warn(final String format, final Object arg1, final Object arg2) {
832 if (!this.isWarnEnabled()) { return; }
833 this.formatAndLog(Level.WARN, null, format, arg1, arg2);
834 }
835
836 @Override
837 public void warn(final String msg, final Throwable t) {
838 if (!this.isWarnEnabled()) { return; }
839 this.log(Level.WARN, null, msg, t);
840 }
841
842
843
844
845
846
847
848
849 private String computeShortName() {
850 final List<String> splitName = new ArrayList<String>();
851 splitName.addAll(Arrays.asList(this.name.split("\\.")));
852 final int shortNameLength = ((splitName.size() - 1) * 2)
853 + splitName.get(splitName.size() - 1).length();
854 final String finalName = splitName.remove(splitName.size() - 1);
855 final StringBuffer shortName = new StringBuffer(shortNameLength);
856 for (final String part : splitName) {
857 shortName.append(part.charAt(0)).append('.');
858 }
859 shortName.append(finalName);
860 return shortName.toString();
861 }
862
863
864
865
866
867
868
869
870 private Level determineCurrentLevel() {
871
872 String tempName = this.name;
873 Level level = null;
874 int indexOfLastDot = tempName.length();
875 while ((level == null) && (indexOfLastDot > -1)) {
876 tempName = tempName.substring(0, indexOfLastDot);
877 level = BukkitLoggerAdapter.stringToLevel(BukkitLoggerAdapter.getStringProperty(BukkitLoggerAdapter.CONFIG_KEY_PREFIX_LOG
878 + tempName,
879 null));
880 indexOfLastDot = String.valueOf(tempName).lastIndexOf(".");
881 }
882
883 return (level == null) ? BukkitLoggerAdapter.CONFIG_VALUE_DEFAULT_LOG_LEVEL
884 : level;
885 }
886
887
888
889
890
891
892
893
894
895
896
897
898
899 private void formatAndLog(final Level level, final Marker marker,
900 final String format, final Object... arguments) {
901 if (!this.isLevelEnabled(level)) { return; }
902 final FormattingTuple tp = MessageFormatter.arrayFormat(format, arguments);
903 this.log(level, marker, tp.getMessage(), tp.getThrowable());
904 }
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920 private void formatAndLog(final Level level, final Marker marker,
921 final String format, final Object arg1,
922 final Object arg2) {
923 if (!this.isLevelEnabled(level)) { return; }
924 final FormattingTuple tp = MessageFormatter.format(format, arg1, arg2);
925 this.log(level, marker, tp.getMessage(), tp.getThrowable());
926 }
927
928
929
930
931
932
933
934
935 private boolean isLevelEnabled(final Level logLevel) {
936
937
938
939 BukkitLoggerAdapter.init(false);
940
941
942
943
944
945
946 final Level currentLogLevel = this.determineCurrentLevel();
947 return (logLevel.toInt() >= currentLogLevel.toInt())
948 && (BukkitLoggerAdapter.getBukkitLogger().isLoggable(BukkitLoggerAdapter.slf4jLevelIntToBukkitJULLevel(logLevel)));
949 }
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964 private void log(final Level level, final Marker marker,
965 final String message, final Throwable throwable) {
966 final java.util.logging.Logger logger;
967 synchronized (BukkitLoggerAdapter.INITIALIZATION_LOCK) {
968
969 if (!this.isLevelEnabled(level)) { return; }
970
971 logger = BukkitLoggerAdapter.getBukkitLogger();
972 }
973
974
975 final StringBuilder buf = new StringBuilder(32);
976 boolean hasHeader = false;
977
978
979
980 if (marker instanceof ColorMarker) {
981 buf.append(((ColorMarker) marker).getValue());
982 } else {
983 buf.append(BukkitLoggerAdapter.CONFIG_VALUE_LEVEL_COLORS.get(level)
984 .getValue());
985 }
986
987
988 if (BukkitLoggerAdapter.CONFIG_VALUE_SHOW_HEADER) {
989 hasHeader = true;
990 buf.append("[SLF4J]");
991 }
992
993
994
995 switch (level) {
996 case TRACE:
997 hasHeader = true;
998 buf.append("[TRACE]");
999 break;
1000 case DEBUG:
1001 hasHeader = true;
1002 buf.append("[DEBUG]");
1003 break;
1004 default:
1005 break;
1006 }
1007
1008
1009 if (BukkitLoggerAdapter.CONFIG_VALUE_SHOW_THREAD_NAME) {
1010 hasHeader = true;
1011 buf.append('[');
1012 buf.append(Thread.currentThread().getName());
1013 buf.append("]");
1014 }
1015
1016
1017 if (hasHeader) {
1018 buf.append(' ');
1019 }
1020
1021
1022 if (BukkitLoggerAdapter.CONFIG_VALUE_SHOW_LOG_NAME) {
1023 buf.append('{').append(this.name).append("} ");
1024 } else if (BukkitLoggerAdapter.CONFIG_VALUE_SHOW_SHORT_LOG_NAME) {
1025 if (this.shortLogName == null) {
1026 this.shortLogName = this.computeShortName();
1027 }
1028 buf.append('{').append(this.shortLogName).append("} ");
1029 }
1030
1031
1032 buf.append(message);
1033
1034
1035 if (throwable != null) {
1036 buf.append('\n').append(ExceptionUtils.getFullStackTrace(throwable)
1037 .trim());
1038 }
1039
1040
1041 buf.append(ChatColor.RESET);
1042
1043
1044 logger.log(BukkitLoggerAdapter.slf4jLevelIntToBukkitJULLevel(level),
1045 ColorMapper.map(buf.toString()));
1046 }
1047 }