Ir al contenido

StackTraceUtils

Clase de utilidad con métodos estáticos auxiliares para inspeccionar la pila de llamadas actual, formatear trazas de excepciones, capturar volcados de hilos y localizar ficheros de volcado de memoria (heap dump). Todos los métodos son estáticos. Los resultados de traza excluyen automáticamente los paquetes de framework habituales (Tomcat, Spring, Spring Security) para que solo se devuelvan los frames a nivel de aplicación.

Descripción:

Método Valores de retorno Descripción
whoCalledMe() StackTraceElement Devuelve el StackTraceElement del método que llamó al método actual (dos frames por encima en la pila). Devuelve null si la pila es demasiado superficial.

Ejemplo:

StackTraceElement caller = StackTraceUtils.whoCalledMe();
if (caller != null) {
System.out.println("Called by: " + caller.getClassName() + "." + caller.getMethodName());
}

Descripción:

Método Valores de retorno Descripción
whoseCalledMe() List Devuelve la lista completa de entradas StackTraceElement desde el frame que llama hacia arriba. Devuelve una lista vacía si la pila es demasiado superficial.

Descripción:

Método Valores de retorno Descripción
isCallingMe(String className) boolean Devuelve true si algún frame de la pila de llamadas actual tiene un nombre de clase que empieza por className.
isCallingMe(String className, String methodName) boolean Devuelve true si algún frame de la pila de llamadas actual coincide tanto con el prefijo de nombre de clase dado como con el nombre de método exacto.

Ejemplo:

package com.openkm;
import com.openkm.util.StackTraceUtils;
public class Test {
public static void main(String[] args) {
boolean calledFromAction = StackTraceUtils.isCallingMe("com.openkm.automation.action");
System.out.println("Called from action: " + calledFromAction);
boolean calledFromFire = StackTraceUtils.isCallingMe("com.openkm.automation", "fireEvent");
System.out.println("Called from fireEvent: " + calledFromFire);
}
}

Descripción:

Método Valores de retorno Descripción
logTrace(Logger log) void Registra la pila de llamadas actual en nivel WARN usando el Logger de SLF4J proporcionado, un frame por línea. Los frames de framework (Tomcat, Spring, etc.) se omiten.

Descripción:

Método Valores de retorno Descripción
getTrace() String Devuelve la pila de llamadas actual como una cadena formateada, excluyendo los frames de framework.
getTrace(Throwable t) String Devuelve la traza de pila del throwable dado como una cadena formateada, excluyendo los frames de framework.
getTrace(Throwable t, int row) String Devuelve la traza de pila del throwable dado a partir del índice de frame row, excluyendo los frames de framework.

Descripción:

Método Valores de retorno Descripción
getTraceList(Throwable t) List Devuelve la traza de pila del throwable dado como una lista de cadenas, una por frame, excluyendo los frames de framework.
getTraceList(Throwable t, int row) List Devuelve la traza de pila del throwable dado como una lista de cadenas a partir del índice de frame row, excluyendo los frames de framework.

Descripción:

Método Valores de retorno Descripción
toString(Throwable t) String Convierte la traza de pila completa de la excepción (incluyendo el mensaje y todos los frames) a una cadena de texto plano, equivalente a imprimirla en un PrintWriter.

Ejemplo:

package com.openkm;
import com.openkm.util.StackTraceUtils;
import java.util.List;
public class Test {
public static void main(String[] args) {
try {
List<String> keys = null;
for (String key : keys) {
}
} catch (Exception e) {
System.out.println(StackTraceUtils.toString(e));
System.out.println("--- filtered trace ---");
System.out.println(StackTraceUtils.getTrace(e));
}
}
}

Descripción:

Método Valores de retorno Descripción
getThreadDump() String Devuelve un volcado completo de todos los hilos vivos en la JVM, incluyendo información de locks y monitores. Útil para diagnosticar interbloqueos o hilos colgados.

Descripción:

Método Valores de retorno Descripción
searchHprofFiles() List Busca en el directorio home de Tomcat (propiedad de sistema catalina.home) ficheros de volcado de memoria terminados en .hprof. Devuelve una lista vacía si catalina.home no está establecida o no es accesible.

Ejemplo:

package com.openkm;
import com.openkm.util.StackTraceUtils;
import java.io.File;
import java.util.List;
public class Test {
public static void main(String[] args) {
System.out.println(StackTraceUtils.getThreadDump());
List<File> hprofs = StackTraceUtils.searchHprofFiles();
hprofs.forEach(f -> System.out.println("Heap dump: " + f.getAbsolutePath()));
}
}