1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.util;
18
19 import java.util.NoSuchElementException;
20 import java.util.Stack;
21
22 import org.apache.logging.log4j.status.StatusLogger;
23
24
25
26
27 public final class StackLocatorUtil {
28 private static StackLocator stackLocator = null;
29 private static volatile boolean errorLogged = false;
30
31 static {
32 stackLocator = StackLocator.getInstance();
33 }
34
35 private StackLocatorUtil() {
36 }
37
38
39
40
41
42 @PerformanceSensitive
43 public static Class<?> getCallerClass(final int depth) {
44 return stackLocator.getCallerClass(depth + 1);
45 }
46
47 public static StackTraceElement getStackTraceElement(final int depth) {
48 return stackLocator.getStackTraceElement(depth + 1);
49 }
50
51 @PerformanceSensitive
52 public static Class<?> getCallerClass(final String fqcn) {
53 return getCallerClass(fqcn, Strings.EMPTY);
54 }
55
56
57 @PerformanceSensitive
58 public static Class<?> getCallerClass(final String fqcn, final String pkg) {
59 return stackLocator.getCallerClass(fqcn, pkg);
60 }
61
62
63 @PerformanceSensitive
64 public static Class<?> getCallerClass(final Class<?> anchor) {
65 return stackLocator.getCallerClass(anchor);
66 }
67
68
69 @PerformanceSensitive
70 public static Stack<Class<?>> getCurrentStackTrace() {
71 return stackLocator.getCurrentStackTrace();
72 }
73
74 public static StackTraceElement calcLocation(final String fqcnOfLogger) {
75 try {
76 return stackLocator.calcLocation(fqcnOfLogger);
77 } catch (NoSuchElementException ex) {
78 if (!errorLogged) {
79 errorLogged = true;
80 StatusLogger.getLogger().warn("Unable to locate stack trace element for {}", fqcnOfLogger, ex);
81 }
82 return null;
83 }
84 }
85 }