Cómo almacenar printStackTrace en una cadena [duplicate]
⏰ 3 minutos de lectura
as
¿Cómo puedo obtener el e.printStackTrace() y almacenarlo en un String ¿variable? Quiero usar la cadena generada por e.printStackTrace() más adelante en mi programa.
Todavía soy nuevo en Java, así que no estoy muy familiarizado con StringWriter que creo que será la solución. O si tienes alguna otra idea, por favor házmelo saber. Gracias
En realidad, no es la misma pregunta: la otra pregunta en realidad especifica que solo quieren convertir el resultado de Throwable.getStackTrace() a una cadena. Eso podría contener bastante menos información de la que mostraría Throwable.printStackTrace.
– SamB
5 de febrero de 2020 a las 1:56
zach l
Algo en la línea de
StringWriter errors = new StringWriter();
ex.printStackTrace(new PrintWriter(errors));
return errors.toString();
@Zach L – Gracias por tu respuesta. funcionó para mí para imprimir el seguimiento de la pila junto con un mensaje de error personalizado (Personalizado). De nuevo, gracias por tu ayuda.
– Umamaheshwar Thota
7 de marzo de 2013 a las 10:47
Esto también imprime las causas anidadas de la excepción lanzada, que es justo lo que necesitaba. ¡Gracias!
–Tim Stewart
27/09/2013 a las 20:00
¿Qué pasa con el cierre? PrintWriter después del uso para liberar recursos? Al leer los documentos, encontré que no es necesario para StringWriter.
try {
// your code here
} catch(Exception e) {
String s = ExceptionUtils.getStackTrace(e);
}
tienes que usar getStackTrace () método en lugar de printStackTrace(). Aquí hay un buen ejemplo:
import java.io.*;
/**
* Simple utilities to return the stack trace of an
* exception as a String.
*/
public final class StackTraceUtil {
public static String getStackTrace(Throwable aThrowable) {
final Writer result = new StringWriter();
final PrintWriter printWriter = new PrintWriter(result);
aThrowable.printStackTrace(printWriter);
return result.toString();
}
/**
* Defines a custom format for the stack trace as String.
*/
public static String getCustomStackTrace(Throwable aThrowable) {
//add the class name and any message passed to constructor
final StringBuilder result = new StringBuilder( "BOO-BOO: " );
result.append(aThrowable.toString());
final String NEW_LINE = System.getProperty("line.separator");
result.append(NEW_LINE);
//add each element of the stack trace
for (StackTraceElement element : aThrowable.getStackTrace() ){
result.append( element );
result.append( NEW_LINE );
}
return result.toString();
}
/** Demonstrate output. */
public static void main (String... aArguments){
final Throwable throwable = new IllegalArgumentException("Blah");
System.out.println( getStackTrace(throwable) );
System.out.println( getCustomStackTrace(throwable) );
}
}
mihai danila
En la línea de Guayaba, Apache Commons Lang ha ExceptionUtils.getFullStackTrace en org.apache.commons.lang.exception. De una respuesta anterior en StackOverflow.
jonathan fausto
StackTraceElement[] stack = new Exception().getStackTrace();
String theTrace = "";
for(StackTraceElement line : stack)
{
theTrace += line.toString();
}
lakshayg
Utilice la librería apache commons-lang3
import org.apache.commons.lang3.exception.ExceptionUtils;
//...
String[] ss = ExceptionUtils.getRootCauseStackTrace(e);
logger.error(StringUtils.join(ss, System.lineSeparator()));
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
En realidad, no es la misma pregunta: la otra pregunta en realidad especifica que solo quieren convertir el resultado de
Throwable.getStackTrace()
a una cadena. Eso podría contener bastante menos información de la que mostraríaThrowable.printStackTrace
.– SamB
5 de febrero de 2020 a las 1:56