有时候需要记录异常打印e.printStackTrace的内容,可以使用下面的写法
try {
//业务代码
}catch (Exception e){
try{
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
log.debug(sw.toString());
pw.close();
sw.close();
}catch (Exception e1){
e1.printStackTrace();
}
}
/以下是相关扩展*****/
参考:https://blog.youkuaiyun.com/huangyangquan/article/details/78173141
如果你遇到一个情景是你必须使用一个Reader或者Writer来作为参数传递参数,但你的数据源又仅仅是一个String类型数据,无需从文件中写出,那么此时就可以用到它们。并且值得注意的是StringWriter中,写入的数据只是存在于缓存中,并不会写入实质的存储介质之中。
StringReader和StringWriter
package net.nyist.io;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
public class StringNodeTest {
public static void main(String[] args) {
String src = "从明天起,做一个幸福的人,\n喂马,劈材,周游世界,\n从明天起,关心粮食和蔬菜,\n我有一所房子,面朝大海,春暖花开,\n从明天起,和每一个人通信,告诉他们我的幸福\n";
char[] buffer = new char[32];
int hasRead = 0;
try(
StringReader sr = new StringReader(src);
){
//采用循环读取的方式,读取字符串
while((hasRead = sr.read(buffer))> 0 ){
//
System.out.println(new String(buffer,0,hasRead));
}
}catch(IOException ioe){
ioe.printStackTrace();
}
try(
//
StringWriter sw = new StringWriter();
){
//调用方法执行输出
sw.write("有一个美丽的新世界\n");
sw.write("有一个美丽的新世界\n");
sw.write("有一个美丽的新世界\n");
sw.write("有一个美丽的新世界\n");
sw.write("有一个美丽的新世界\n");
System.out.println(sw.toString());
}catch(IOException ioe){
ioe.printStackTrace();
}
}
}
参考:https://blog.youkuaiyun.com/yuhua3272004/article/details/2775881
在Java中,利用try…catch(…finally)语句可以捕获和处理异常,非常方便。catch块的常见异常处理方式是输出异常,例如把异常输出到日志文件。
Exception类有一个printStackTrace()方法,它能够从发生异常的方法中输出堆栈信息,默认输出位置是System.err。但是,有时候我们要把堆栈信息输出到System.err之外的其他地方,例如在出现异常时把堆栈信息输出到email,或者用一个对话框显示出来。
printStackTrace()方法有几种不同的类型:
· printStackTrace(),输出到标准错误流。
· printStackTrace(PrintStream ps),输出到名为ps的PrintStream。
· printStackTrace(PrintWriter pw),输出到名为pw的PrintWriter。
我们可以用最后一种printStackTrace()方法把堆栈信息保存到String对象。只要在String对象中捕获了堆栈信息,我们就可以方便地在应用的任何地方使用这些信息了。下面的代码片断示范了具体的实现步骤
private String getStackTraceAsString() {
// StringWriter将包含堆栈信息
StringWriter stringWriter = new StringWriter();
//必须将StringWriter封装成PrintWriter对象,
//以满足printStackTrace的要求
PrintWriter printWriter = new PrintWriter(stringWriter);
//获取堆栈信息
e.printStackTrace(printWriter);
//转换成String,并返回该String
StringBuffer error = stringWriter.getBuffer();
return error.toString();
}