2013-04-04 29 views
14

我有一種情況,我想要使用記錄器打印catch塊中捕獲的所有異常。如何使用記錄器打印異常?

try { 
     File file = new File("C:\\className").mkdir(); 
     fh = new FileHandler("C:\\className\\className.log"); 
     logger.addHandler(fh); 
     logger.setUseParentHandlers(false); 
     SimpleFormatter formatter = new SimpleFormatter(); 
     fh.setFormatter(formatter); 
    } catch (Exception e) { 
     logger.info(e); 
    } 

我得到了錯誤記錄器不能被應用到java.io.Exception...

我擔心的是,如果我在try塊做這麼多的事情,我只保留一個catch塊爲趕上(例外五),那麼有沒有任何方式使用記錄器打印catch塊中捕獲的任何類型的異常? 注:我們正在使用java.util.logging.Logger中的API

請指導我...在此先感謝

+0

http://stackoverflow.com/a/1149718/112500 – Shashi 2013-04-04 07:56:08

+0

可能的重複http://stackoverflow.com/questions/1149703/stacktrace-to-string-in-java – Shashi 2013-04-04 07:56:51

+0

一般日誌文件的名稱,格式等剩下的代碼之外,以便它可以在生產中進行調整。 – Jayan 2013-04-04 08:07:07

回答

23

您應該澄清您正在使用哪種記錄器。

org.apache.commons.logging.Log接口有方法void error(Object message, Throwable t)(和方法void info(Object message, Throwable t)),它將堆棧跟蹤與您的自定義消息一起記錄。 Log4J的實現也有這個方法。

所以,也許你需要寫:

logger.error("BOOM!", e); 

如果需要使用INFO級別記錄它(雖然它可能是一個陌生的使用情況),則:

logger.info("Just a stack trace, nothing to worry about", e); 

希望它有助於。

+0

@Kadelakig對不起,我們正在使用java.util.looging API – Pankaj 2013-04-04 08:39:41

+4

哦,我明白了。它似乎也有一些類似的功能:'java.util.logging.Logger.getLogger(「Test」).log(Level.INFO,「BOOM!」,e);'< - 這對我有用。 – 2013-04-05 12:04:01

+0

是的,這有助於我所尋找的 – spandey15 2018-02-07 08:12:15

0

您可以使用此方法的異常堆棧登錄到字符串

public String stackTraceToString(Throwable e) { 
    StringBuilder sb = new StringBuilder(); 
    for (StackTraceElement element : e.getStackTrace()) { 
     sb.append(element.toString()); 
     sb.append("\n"); 
    } 
    return sb.toString(); 
} 
0

嘗試記錄如下的堆棧跟蹤:

logger.error("Exception :: " , e); 
+0

我試過這個,得到了錯誤符號未找到符號:方法錯誤(java.lang.String,java.io.IOException) location:class java.util.logging.Logger logger.error(「Exception ::」, E); – Pankaj 2013-04-04 08:28:35

+0

@Pankaj您不是在使用Log4j進行日誌記錄。該方法存在於'org.apache.log4j.Logger'中。 – 2013-04-04 12:29:26

4

使用:LOGGER.log(Level.INFO, "Got an exception.", e);
LOGGER.info("Got an exception. " + e.getMessage());

+1

如果異常意外,那麼我建議使用WARNING日誌級別的SEVERE作爲日誌消息 – SimY4 2014-09-25 12:03:31

+0

是的,對於可能是真的意外異常。儘管我回答了問題,提問者使用信息日誌級別進行記錄,因此我的示例使用了信息。 – user3094526 2014-10-23 08:11:57