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.util.Strings;
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 public ThrowableInformation(Throwable throwable) {
36 this.throwable = throwable;
37 Method method = null;
38 try {
39 Class<?> throwables = Class.forName("org.apache.logging.log4j.core.util.Throwables");
40 method = throwables.getMethod("toStringList", Throwable.class);
41 } catch (ClassNotFoundException | NoSuchMethodException ex) {
42
43 }
44 this.toStringList = method;
45 }
46
47 public Throwable getThrowable() {
48 return throwable;
49 }
50
51 public synchronized String[] getThrowableStrRep() {
52 if (toStringList != null && throwable != null) {
53 try {
54 @SuppressWarnings("unchecked")
55 List<String> elements = (List<String>) toStringList.invoke(null, throwable);
56 if (elements != null) {
57 return elements.toArray(Strings.EMPTY_ARRAY);
58 }
59 } catch (IllegalAccessException | InvocationTargetException ex) {
60
61 }
62 }
63 return null;
64 }
65 }
66