很多时候我们需要得到堆栈的信息,不光是输出到控制台或日志文件。比如目前我所在的项目当定时任务执行失败时需要邮件通知开发人员,邮件的主要内容自然就是异常的错误信息了。默认的e.printStackTrace()只是输出堆栈信息到控制台,其实它也提供了输出到writer的实现,我们可以利用它来实现输出到StringWriter,从而得到String。
默认代码:
try { throw new RuntimeException("手动抛出的异常"); } catch (Exception e) { e.printStackTrace(); }
将异常信息写入到字符串:
/** * 获取异常堆栈信息 * * @param e * @return */ public static String stackTrace2String(Throwable e) { StringWriter writer = new StringWriter(); e.printStackTrace(new PrintWriter(writer, true)); return writer.toString(); }
public static String trace(Throwable t) { StringWriter stringWriter = new StringWriter(); PrintWriter writer = new PrintWriter(stringWriter); t.printStackTrace(writer); StringBuffer buffer = stringWriter.getBuffer(); return buffer.toString(); }