Teniendo la siguiente estructura de proyecto, donde la Clase Demo, utiliza la clase Top y esta la TopNested.
Para que saber desde la clase TopNested desde donde se esta llamando, se invoca el método printStackTrace de la clase StackTracePrinter, el cual tiene el siguiente código:
/**
* Emmerson: Se imprime la pila de llamadas obviando la clase actual y la del stacktrace.
* @param args
*/
public static void printStackTrace() {
StackTraceElement[] stack = Thread.currentThread().getStackTrace();
for(int pos=stack.length - 1; pos > 1; pos--){
StackTraceElement elem = stack[pos];
//se elimina el paquete del nombre de la clase
String name = elem.getClassName().substring(
elem.getClassName().lastIndexOf(".") + 1 );
System.out.print(name + "." + elem.getMethodName() + ":"
+ elem.getLineNumber());
if(pos > 2)System.out.print("->");
}
}
Como se puede ver en el resultado de la ejecución tenemos que la ejecución a empezado en el método main de la clase Demo, y esta invoca el metodoTop de la clase Top y este el metodoNested de la clase TopNested.
Como se puede ver, esta información es mucho más reducida y concisa que hacer un printStackTrace de un objeto del tipo Throwable, y lo mejor es que no necesitamos de una excepción para poder acceder a esta información.
- FIN -


2 comments:
Muy bueno, llevaba tiempo queriendo algo asi, y lo tenia muy facil.
Muchas gracias por compartir!!
Ten cuidado de utilizar esta funcionalidad de forma intensiva ya que podría penalizar el rendimiento de tus aplicaciones.
Post a Comment