1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.pattern;
18
19 import org.apache.logging.log4j.core.LogEvent;
20 import org.apache.logging.log4j.core.config.plugins.Plugin;
21 import org.apache.logging.log4j.core.impl.ThrowableProxy;
22
23
24
25
26
27
28
29
30
31
32 @Plugin(name = "RootThrowablePatternConverter", type = "Converter")
33 @ConverterKeys({"rEx", "rThrowable", "rException" })
34 public final class RootThrowablePatternConverter extends ThrowablePatternConverter {
35
36
37
38
39
40 private RootThrowablePatternConverter(final String[] options) {
41 super("RootThrowable", "throwable", options);
42 }
43
44
45
46
47
48
49
50
51 public static RootThrowablePatternConverter newInstance(
52 final String[] options) {
53 return new RootThrowablePatternConverter(options);
54 }
55
56
57
58
59 public void format(final LogEvent event, final StringBuilder toAppendTo) {
60 Throwable throwable = event.getThrown();
61 if (throwable != null) {
62 if (!(throwable instanceof ThrowableProxy)) {
63 super.format(event, toAppendTo);
64 return;
65 }
66 ThrowableProxy t = (ThrowableProxy) throwable;
67 String trace = t.getRootCauseStackTrace();
68 int len = toAppendTo.length();
69 if (len > 0 && !Character.isWhitespace(toAppendTo.charAt(len - 1))) {
70 toAppendTo.append(" ");
71 }
72 if (lines > 0) {
73 StringBuilder sb = new StringBuilder();
74 String[] array = trace.split("\n");
75 for (int i = 0; i < lines; ++i) {
76 sb.append(array[i]).append("\n");
77 }
78 toAppendTo.append(sb.toString());
79
80 } else {
81 toAppendTo.append(trace);
82 }
83 }
84 }
85 }