Java如何打印完整的堆棧信息
Java print full StackTrace
我們在編寫一些組件時,使用的日志系統(tǒng)有時并不能打印完整的堆棧信息,比如slf4j,log4j,我們在調(diào)用log.error("found error ...",e)
打印異常時,只打印一行異常信息。我們看下slf4j的源碼
/** * Log an exception (throwable) at the ERROR level with an * accompanying message. * * @param msg the message accompanying the exception * @param t the exception (throwable) to log */ public void error(String msg, Throwable t);
它在打印exception時,只是打印了堆棧當(dāng)中的第一行Throwable
的信息, 而我們想要的是把整個堆棧都打印出來,這時我們會用下面方式打印堆棧信息。
demo
e.printStackTrace()
堆棧信息定向到日志文件中
這雖然打印了完整的堆棧信息,但它并不會把堆棧信息定向到日志文件中,這時我們就需要利用輸出流把信息重新定到變量中,然后再送入到日志系統(tǒng)中
/** * 完整的堆棧信息 * * @param e Exception * @return Full StackTrace */ public static String getStackTrace(Exception e) { StringWriter sw = null; PrintWriter pw = null; try { sw = new StringWriter(); pw = new PrintWriter(sw); e.printStackTrace(pw); pw.flush(); sw.flush(); } finally { if (sw != null) { try { sw.close(); } catch (IOException e1) { e1.printStackTrace(); } } if (pw != null) { pw.close(); } } return sw.toString(); }
然后我們這樣調(diào)用就解決了這個問題
log.error("fount error...", getStackTrace(e))
以上就是Java如何打印完整的堆棧信息的詳細(xì)內(nèi)容,更多關(guān)于Java打印完整堆棧信息的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java通過Lambda表達(dá)式實現(xiàn)簡化代碼
我們在編寫代碼時,常常會遇到代碼又長又重復(fù)的情況,就像調(diào)用第3方服務(wù)時,每個方法都差不多,?寫起來啰嗦,?改起來麻煩,?還容易改漏,所以本文就來用Lambda表達(dá)式簡化一下代碼,希望對大家有所幫助2023-05-05