记录e.printStackTrace内容

有时候需要记录异常打印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.csdn.net/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.csdn.net/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();
}

你可能感兴趣的:(java)