2010-02-25 79 views
13

是否有一個記錄器,將輕鬆記錄我的堆棧跟蹤(我得到的 ex.printStackTrace())?我搜索了log4j文檔,並沒有發現任何有關記錄堆棧跟蹤的 。Java - 需要一個記錄程序包,將記錄堆棧跟蹤

我可以

StringWriter sw = new StringWriter(); 
ex.printStackTrace(new PrintWriter(sw)); 
String stacktrace = sw.toString(); 
logger.error(stacktrace); 

這樣做自己,但我不希望所有的地方複製該代碼。

如果log4j不會這樣做對我有另一個日誌包將 爲我記錄stacktrace?

謝謝。

回答

32

使用log4j這與完成的:

logger.error("An error occurred", exception); 

第一個參數是將要顯示的消息,第二個是異常(拋出),其堆棧跟蹤被記錄。

另一種選擇是commons-logging,它是相同的:

logger.log(Level.SEVERE, "Message", exception); 
+0

任何標準的設施只需登錄stacktra CE?有時候,我只是不知道(或者不想)在郵件中寫些什麼 – 2015-10-28 04:09:03

3

java.util.logging可以初始化與自定義日誌格式記錄儀就像這裏:

log.error("Message", exception); 

隨着java.util.logging這可以通過以下方式進行:

private Logger initTextLogger() throws SecurityException, IOException { 
     Logger logger = Logger.getLogger(YourClass.class.getName()); 
     FileHandler fileHandler = new FileHandler(logFilePath, false); 
     SimpleFormatter logFormatter = new SimpleFormatter() { 
      @Override 
      public String format(LogRecord record) { 
      String stacktrace = ""; 
      Throwable t = record.getThrown(); 
      if(t!=null){ 
       StringWriter sw = new StringWriter(); 
       t.printStackTrace(new PrintWriter(sw)); 
       stacktrace = sw.toString(); 
      }    
      return record.getLevel() + ": " + record.getMessage() + "\r\n" 
        + stacktrace; 
     } 
     }; 
     fileHandler.setFormatter(logFormatter); 
     logger.addHandler(fileHandler); 

     return logger; 
    } 
相關問題