- 調(diào)用無參數(shù)的Throwable.printStackTrace()方法常拓,我們看下這個(gè)方法的實(shí)現(xiàn):
public void printStackTrace() {
printStackTrace(System.err);
}
printStackTrace()方法將異常棧輸出到標(biāo)準(zhǔn)錯(cuò)誤流中侄榴,但有些環(huán)境不支持標(biāo)準(zhǔn)錯(cuò)誤流或者我們希望以統(tǒng)一的方式輸出日志時(shí)候,這時(shí)候這種方式不是最好的選擇。在生產(chǎn)環(huán)境中推薦使用第二和第三種方法。
- 使用guava中的Throwables.getStackTraceAsString(Throwable throwable)方法
public static String getStackTraceAsString(Throwable throwable) {
StringWriter stringWriter = new StringWriter();
throwable.printStackTrace(new PrintWriter(stringWriter));
return stringWriter.toString();
}
該工具方法對(duì)標(biāo)準(zhǔn)庫作了一層封裝品姓,將異常棧轉(zhuǎn)換成字符流。
/**
*
* All rights reserved.
* Created by zzhan on 2017/3/31 20:00.
*/
public class LogHelper {
/**
* 打印異常棧日志
* @param logger
* @param throwable
*/
public static void logStackTrace(Logger logger, Throwable throwable) {
logger.error(getStackTraceAsString(throwable));
}
/**
* 轉(zhuǎn)換異常棧
* @param throwable
* @return
*/
public static String getStackTraceAsString(Throwable throwable) {
StringWriter writer = new StringWriter();
throwable.printStackTrace(new PrintWriter(writer));
return writer.toString();
}
}
注:這個(gè)工具類在我自己的springboot示例中也使用到,一個(gè)主要的用途是記錄全局異常處理器中的錯(cuò)誤信息斤蔓。