Stack trace as String

Converting a stack trace into a String is done with Throwable.printStackTrace(PrintWriter).

If desired, a customized stack trace String can be defined by using the StackTraceElement class, as shown below.

Example

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 throwable) {
    Writer result = new StringWriter();
    PrintWriter printWriter = new PrintWriter(result);
    throwable.printStackTrace(printWriter);
    return result.toString();
  }

  /**
   Defines a custom format for the stack trace as String.
  */
  public static String getCustomStackTrace(Throwable throwable) {
    //add the class name and any message passed to constructor
    StringBuilder result = new StringBuilder( "BOO-BOO: " );
    result.append(throwable.toString());
    String NL = System.getProperty("line.separator");
    result.append(NL);

    //add each element of the stack trace
    for (StackTraceElement element : throwable.getStackTrace()){
      result.append(element);
      result.append(NL);
    }
    return result.toString();
  }

  /** Demonstrate output.  */
  public static void main (String... args){
    Throwable throwable = new IllegalArgumentException("Blah");
    System.out.println(getStackTrace(throwable));
    System.out.println(getCustomStackTrace(throwable));
  }
} 

An example run of this class :

>java -cp . StackTraceUtil
java.lang.IllegalArgumentException: Blah
        at StackTraceUtil.main(StackTraceUtil.java:42)

BOO-BOO: java.lang.IllegalArgumentException: Blah
StackTraceUtil.main(StackTraceUtil.java:42)

See Also :
Dump thread information