1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.log4j.spi;
18
19 import java.lang.reflect.InvocationTargetException;
20 import java.lang.reflect.Method;
21 import java.util.List;
22
23 import org.apache.logging.log4j.core.util.Throwables;
24
25
26
27
28 public class ThrowableInformation implements java.io.Serializable {
29
30 static final long serialVersionUID = -4748765566864322735L;
31
32 private transient Throwable throwable;
33 private Method toStringList;
34
35 @SuppressWarnings("unchecked")
36 public
37 ThrowableInformation(Throwable throwable) {
38 this.throwable = throwable;
39 Method method = null;
40 try {
41 Class throwables = Class.forName("org.apache.logging.log4j.core.util.Throwables");
42 method = throwables.getMethod("toStringList", Throwable.class);
43 } catch (ClassNotFoundException | NoSuchMethodException ex) {
44
45 }
46 this.toStringList = method;
47 }
48
49 public
50 Throwable getThrowable() {
51 return throwable;
52 }
53
54 public synchronized String[] getThrowableStrRep() {
55 if (toStringList != null && throwable != null) {
56 try {
57 @SuppressWarnings("unchecked")
58 List<String> elements = (List<String>) toStringList.invoke(null, throwable);
59 if (elements != null) {
60 return elements.toArray(new String[0]);
61 }
62 } catch (IllegalAccessException | InvocationTargetException ex) {
63
64 }
65 }
66 return null;
67 }
68 }
69