stacktrace print java stack-trace

printstacktrace java



Cómo almacenar printStackTrace en una cadena (8)

Algo a lo largo de las líneas de

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

Debería ser lo que necesitas.

Documentación relevante:

Esta pregunta ya tiene una respuesta aquí:

¿Cómo puedo obtener el e.printStackTrace() y almacenarlo en una variable de String ? 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 y creo que será la solución. O si tienes alguna otra idea por favor házmelo saber. Gracias


En la línea de Guayaba, Apache Commons Lang tiene ExceptionUtils.getFullStackTrace en org.apache.commons.lang.exception . De una respuesta previa en .



Usa el apache commons-lang3 lib.

import org.apache.commons.lang3.exception.ExceptionUtils; //... String[] ss = ExceptionUtils.getRootCauseStackTrace(e); logger.error(StringUtils.join(ss, System.lineSeparator()));



getStackTrace () utilizar el método getStackTrace () 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) ); } }


call: getStackTraceAsString(sqlEx) public String getStackTraceAsString(Exception exc) { String stackTrace = "*** Error in getStackTraceAsString()"; ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintStream ps = new PrintStream( baos ); exc.printStackTrace(ps); try { stackTrace = baos.toString( "UTF8" ); // charsetName e.g. ISO-8859-1 } catch( UnsupportedEncodingException ex ) { Logger.getLogger(sss.class.getName()).log(Level.SEVERE, null, ex); } ps.close(); try { baos.close(); } catch( IOException ex ) { Logger.getLogger(sss.class.getName()).log(Level.SEVERE, null, ex); } return stackTrace; }


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