如何将printStackTrace存储到string中

我怎样才能得到e.printStackTrace()并将其存储到一个Stringvariables? 我想在程序中稍后使用由e.printStackTrace()生成的string。

我还是Java的新手,所以我不太熟悉StringWriter ,我认为这将是解决scheme。 或者,如果您有任何其他想法,请让我知道。 谢谢

东西沿线

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

应该是你需要的。

相关文件:

  • StringWriter的
  • 为PrintWriter
  • Throwable的

番石榴使Throwables.getStackTraceAsString(Throwable)变得简单:

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

在内部,这就是@Zach L所build议的。

您必须使用getStackTrace ()方法而不是printStackTrace() 。 这是一个很好的例子 :

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

沿着番石榴的路线,Apache Commons Lang在org.apache.commons.lang.exceptionExceptionUtils.getFullStackTrace 。 从 StackOverflow上的一个先前的答案 。

你可以使用ExceptionUtils.getStackTrace(Throwable t); 来自Apache Commons 3类org.apache.commons.lang3.exception.ExceptionUtils

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

ExceptionUtils.getStackTrace(Throwable t)

代码示例:

 try { // your code here } catch(Exception e) { String s = ExceptionUtils.getStackTrace(e); } 
 StackTraceElement[] stack = new Exception().getStackTrace(); String theTrace = ""; for(StackTraceElement line : stack) { theTrace += line.toString(); } 

使用Apache的commons-lang3库

 import org.apache.commons.lang3.exception.ExceptionUtils; //... String[] ss = ExceptionUtils.getRootCauseStackTrace(e); logger.error(StringUtils.join(ss, System.lineSeparator())); 
 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 eg 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; }