public final class StackLocator extends Object
 This method, available only in the Oracle/Sun/OpenJDK implementations of the Java Virtual Machine, is a much more
 efficient mechanism for determining the Class of the caller of a particular method. When it is not available,
 a SecurityManager is the second-best option. When this is also not possible, the StackTraceElement[]
 returned by Throwable.getStackTrace() must be used, and its String class name converted to a
 Class using the slow Class.forName(java.lang.String) (which can add an extra microsecond or more for each invocation
 depending on the runtime ClassLoader hierarchy).
 
 During Java 8 development, the sun.reflect.Reflection.getCallerClass(int) was removed from OpenJDK, and this
 change was back-ported to Java 7 in version 1.7.0_25 which changed the behavior of the call and caused it to be off
 by one stack frame. This turned out to be beneficial for the survival of this API as the change broke hundreds of
 libraries and frameworks relying on the API which brought much more attention to the intended API removal.
 
 After much community backlash, the JDK team agreed to restore getCallerClass(int) and keep its existing
 behavior for the rest of Java 7. However, the method is deprecated in Java 8, and current Java 9 development has not
 addressed this API. Therefore, the functionality of this class cannot be relied upon for all future versions of Java.
 It does, however, work just fine in Sun JDK 1.6, OpenJDK 1.6, Oracle/OpenJDK 1.7, and Oracle/OpenJDK 1.8. Other Java
 environments may fall back to using Throwable.getStackTrace() which is significantly slower due to
 examination of every virtual frame of execution.
 
| Modifier and Type | Method and Description | 
|---|---|
StackTraceElement | 
calcLocation(String fqcnOfLogger)  | 
Class<?> | 
getCallerClass(Class<?> anchor)  | 
Class<?> | 
getCallerClass(Class<?> sentinelClass,
              Predicate<Class<?>> callerPredicate)  | 
Class<?> | 
getCallerClass(int depth)  | 
Class<?> | 
getCallerClass(String fqcn,
              String pkg)  | 
Stack<Class<?>> | 
getCurrentStackTrace()  | 
static StackLocator | 
getInstance()  | 
StackTraceElement | 
getStackTraceElement(int depth)  | 
public static StackLocator getInstance()
public Class<?> getCallerClass(Class<?> sentinelClass, Predicate<Class<?>> callerPredicate)
public Class<?> getCallerClass(int depth)
public Class<?> getCallerClass(String fqcn, String pkg)
public Class<?> getCallerClass(Class<?> anchor)
public Stack<Class<?>> getCurrentStackTrace()
public StackTraceElement calcLocation(String fqcnOfLogger)
public StackTraceElement getStackTraceElement(int depth)
Copyright © 1999-1969 The Apache Software Foundation. All Rights Reserved.
             Apache Logging, Apache Log4j, Log4j, Apache, the Apache feather logo, the Apache Logging project logo,             and the Apache Log4j logo are trademarks of The Apache Software Foundation.