成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java打印完整的堆棧信息

aikin / 1799人閱讀

摘要:我們?cè)诰帉懸恍┙M件時(shí),使用的日志系統(tǒng)有時(shí)并不能打印完整的堆棧信息,比如我們?cè)谡{(diào)用打印異常時(shí),只打印一行異常信息。

Java print full StackTrace

我們?cè)诰帉懸恍┙M件時(shí),使用的日志系統(tǒng)有時(shí)并不能打印完整的堆棧信息,比如slf4j,log4j,我們?cè)谡{(diào)用log.error("found error ...",e)打印異常時(shí),只打印一行異常信息。我們看下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時(shí),只是打印了堆棧當(dāng)中的第一行Throwable的信息, 而我們想要的是把整個(gè)堆棧都打印出來(lái),這時(shí)我們會(huì)用下面方式打印堆棧信息。

 e.printStackTrace()

這雖然打印了完整的堆棧信息,但它并不會(huì)把堆棧信息定向到日志文件中,這時(shí)我們就需要利用利用輸出流把信息重新定到變量中,然后再送入到日志系統(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)用就解決了這個(gè)問(wèn)題

log.error("fount error...", getStackTrace(e))

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64674.html

相關(guān)文章

  • Java進(jìn)程CPU占用率100%問(wèn)題排查

    摘要:指的是占用了一個(gè)核心,兩個(gè)核心是,以此類推。占用率及對(duì)應(yīng)進(jìn)程可以通過(guò)命令確定,在界面按顯示完整的命令行參數(shù),按顯示每個(gè)核心的統(tǒng)計(jì)數(shù)據(jù)。查看線程堆棧,找到對(duì)應(yīng)的類及行號(hào),然后閱讀代碼查找可能的問(wèn)題原因。 100%指的是占用了CPU一個(gè)核心,兩個(gè)核心是200%,以此類推。CPU占用率及對(duì)應(yīng)進(jìn)程ID(pid)可以通過(guò)top命令確定,在top界面按 c (顯示完整的命令行參數(shù)),按 1 (顯示...

    cyrils 評(píng)論0 收藏0
  • jvm調(diào)優(yōu)

    摘要:一內(nèi)存調(diào)優(yōu)主要的目的是減小的頻率和的次數(shù)。調(diào)優(yōu)工具之主要用來(lái)輸出中運(yùn)行的進(jìn)程狀態(tài)信息。調(diào)優(yōu)工具之和用來(lái)查看堆內(nèi)存使用狀況,一般結(jié)合使用。 一、jvm內(nèi)存調(diào)優(yōu) 主要的...

    snowLu 評(píng)論0 收藏0
  • Java日志正確使用姿勢(shì)

    摘要:但是往往越簡(jiǎn)單的東西越容易讓我們忽視,從而導(dǎo)致一些不該有的發(fā)生,作為一名嚴(yán)謹(jǐn)?shù)某绦騿T,怎么能讓這種事情發(fā)生呢所以下面我們就來(lái)了解一下關(guān)于日志的那些正確使用姿勢(shì)。級(jí)別表示出現(xiàn)了嚴(yán)重錯(cuò)誤,程序?qū)?huì)中斷執(zhí)行。 前言 關(guān)于日志,在大家的印象中都是比較簡(jiǎn)單的,只須引入了相關(guān)依賴包,剩下的事情就是在項(xiàng)目中盡情的打印我們需要的信息了。但是往往越簡(jiǎn)單的東西越容易讓我們忽視,從而導(dǎo)致一些不該有的bug發(fā)...

    UCloud 評(píng)論0 收藏0
  • Java線程堆棧分析

    摘要:線程堆棧最擅長(zhǎng)與分析如下類型問(wèn)題系統(tǒng)無(wú)緣無(wú)故過(guò)高。性能瓶頸如無(wú)法充分利用等線程死鎖死循環(huán),餓死等。由于線程數(shù)量太多導(dǎo)致系統(tǒng)失敗如無(wú)法創(chuàng)建線程等。注意死鎖的兩個(gè)或多個(gè)線程是不消耗的,有的人認(rèn)為的使用率是線程死鎖導(dǎo)致的,這個(gè)說(shuō)法是完全錯(cuò)誤的。 不知覺(jué)間工作已有一年了,閑下來(lái)的時(shí)候總會(huì)思考下,作為一名Java程序員,不能一直停留在開發(fā)業(yè)務(wù)使用框架上面。老話說(shuō)得好,機(jī)會(huì)是留給有準(zhǔn)備的人的,因此...

    jerry 評(píng)論0 收藏0
  • 從JS引擎理解Await b()與Promise.then(b)堆棧處理

    摘要:對(duì)于引擎來(lái)說(shuō),兩者獲取堆棧的方式是不同的。對(duì)于引擎來(lái)說(shuō),堆棧信息附加在了函數(shù)所返回的并在鏈中傳遞,這樣函數(shù)也能在需要的時(shí)候獲取堆棧信息。使用可以實(shí)時(shí)監(jiān)控線上應(yīng)用的錯(cuò)誤,并獲取完整的堆棧信息。 譯者按: Async/Await真的只是簡(jiǎn)單的語(yǔ)法糖嗎?No! 原文:Asynchronous stack traces: why await beats .then() 作者: Math...

    ziwenxie 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

aikin

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<