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