printStackTrace()方法:打印出所有与之相关的异常出处,换句话说就是不仅打印出异常名字还是显示出位置。便于程序的调试。
输出方式:
/**
* 获取e.printStackTrace() 的具体信息,赋值给String 变量,并返回
*
* @param e
* Exception
* @return e.printStackTrace() 中 的信息
*/
public static String getStackTraceInfo(Exception e) {
StringWriter sw = null;
PrintWriter pw = null;
try {
sw = new StringWriter();
pw = new PrintWriter(sw);
e.printStackTrace(pw);//将出错的栈信息输出到printWriter中
pw.flush();
sw.flush();
return sw.toString();
} catch (Exception ex) {
return "printStackTrace()转换错误";
} finally {
if (sw != null) {
try {
sw.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
if (pw != null) {
pw.close();
}
}
}
缺点:
1、在部署到正式服,或者有日志系统不能规范的采集到异常错误,因为这种异常没有附加任何日志规范,比如日期,时间,等级,给日志分析带来了不便
2、e.printStackTrace() 语句要产生的字符串记录的是堆栈信息,太长太多,
要尽量少用,可能会导致锁死(详情)
getMessage()方法:打印出具体异常的名字。不显示具体位置,不方便调试程序。
getMessage()直接返回的就是String