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如何打印完整的堆棧信息的詳細內(nèi)容,更多關(guān)于Java打印完整堆棧信息的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java異常處理 Throwable實現(xiàn)方法解析
這篇文章主要介紹了Java異常處理 Throwable實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-10-10springboot整合netty-mqtt-client實現(xiàn)Mqtt消息的訂閱和發(fā)布示例
本文主要介紹了springboot整合netty-mqtt-client實現(xiàn)Mqtt消息的訂閱和發(fā)布示例,文中根據(jù)實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03SSH框架網(wǎng)上商城項目第23戰(zhàn)之在線支付功能實現(xiàn)
這篇文章主要為大家詳細介紹了SSH框架網(wǎng)上商城項目第23戰(zhàn)之在線支付功能實現(xiàn),感興趣的小伙伴們可以參考一下2016-06-06淺析JavaMail發(fā)送郵件后再通過JavaMail接收格式問題
這篇文章主要介紹了JavaMail發(fā)送郵件后再通過JavaMail接收格式問題 ,本文通過代碼實例給大家詳細解說,需要的朋友可以參考下2019-06-06HTTP?與?SpringBoot?參數(shù)提交與接收協(xié)議方式
HTTP參數(shù)提交方式包括URL查詢、表單、JSON/XML、路徑變量、頭部、Cookie、GraphQL、WebSocket和SSE,依據(jù)請求方法和Content-Type差異,SpringBoot通過特定注解如@RequestParam、@RequestBody實現(xiàn)數(shù)據(jù)獲取,本文介紹HTTP與SpringBoot參數(shù)提交與接收協(xié)議方式,感興趣的一起看看2025-07-07