Cómo almacenar printStackTrace en una cadena [duplicate]

3 minutos de lectura

avatar de usuario
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

avatar de usuario
zach l

Algo en la línea de

StringWriter errors = new StringWriter();
ex.printStackTrace(new PrintWriter(errors));
return errors.toString();

Debería ser lo que necesitas.

Documentación relevante:

  • @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.

    – jaleas

    22 de enero de 2014 a las 9:29


avatar de usuario
colind

Guayaba hace esto fácil con Tirables.getStackTraceAsString(tirable):

Exception e = ...
String stackTrace = Throwables.getStackTraceAsString(e);

Internamente, esto hace lo que sugiere @Zach L.

avatar de usuario
thiagoh

Puedes usar el ExceptionUtils.getStackTrace(Throwable t); de la clase Apache Commons 3 org.apache.commons.lang3.exception.ExceptionUtils.

http://commons.apache.org/proper/commons-lang/

ExceptionUtils.getStackTrace(T arrojable)

Ejemplo de código:

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) );
  }
} 

avatar de usuario
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.

avatar de usuario
jonathan fausto

StackTraceElement[] stack = new Exception().getStackTrace();
String theTrace = "";
for(StackTraceElement line : stack)
{
   theTrace += line.toString();
}

avatar de usuario
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()));

  • logger.error(StringUtils.join(ss, System.lineSeparator()));

    – Pikachu

    12/10/2016 a las 23:36


¿Ha sido útil esta solución?

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
Privacidad