如何将printStackTrace存储到string中
我怎样才能得到e.printStackTrace()
并将其存储到一个String
variables? 我想在程序中稍后使用由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.exception
有ExceptionUtils.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; }