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.
Inspección de la pila de llamadas
Sección titulada «Inspección de la pila de llamadas»whoCalledMe
Sección titulada «whoCalledMe»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());}whoseCalledMe
Sección titulada «whoseCalledMe»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. |
isCallingMe
Sección titulada «isCallingMe»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); }}logTrace
Sección titulada «logTrace»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. |
Formateo de trazas de pila
Sección titulada «Formateo de trazas de pila»getTrace
Sección titulada «getTrace»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. |
getTraceList
Sección titulada «getTraceList»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. |
toString
Sección titulada «toString»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)); } }}Diagnóstico de hilos y memoria
Sección titulada «Diagnóstico de hilos y memoria»getThreadDump
Sección titulada «getThreadDump»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. |
searchHprofFiles
Sección titulada «searchHprofFiles»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())); }}