2012-03-14 33 views
1

我有拋出異常的代碼,我可以打印控制檯上的堆棧跟蹤,並在日誌文件中,但我想它只能在日誌文件中,而不是在控制檯上打印。與Java的log4j

try 
    { 
     ///some code here 

    } 
    catch(Exception e) 
    { 
     logger.error("Error", e.fillInStackTrace()); 
    } 

try塊拋出一些例外,我就是我使用log4J.jar呸

我試圖打印例外的只是對象,但它並沒有顯示整個堆棧跟蹤記錄它在日誌文件中幫助我解決這個問題。

回答

4

你只需要通過異常的日誌呼叫 - 在:

try { 
///some code here 

} catch(Exception e) { 
    logger.error("Error", e); 
} //     ^
+0

感謝您的回覆,它不是打印整個堆棧只是打印異常的名稱例如:空指針異常等,, – 2012-03-15 09:22:51

0

您可以嘗試使用的getStackTrace()來獲取的StackTraceElement數組,並建立你從它想要的字符串。

但是,如果「......這不打印整個堆棧跟蹤......」你在看一個‘引發的’第一個堆棧跟蹤時,意味着該「...... N多」線,看看這個答案:Print full call stack on printStackTrace()?

+0

謝謝我會試試這個 – 2012-03-15 09:25:12

0

感知智慧是什麼,在記錄信息級別或更高將被打印到控制檯。如果您不希望將某些內容打印到控制檯,請使用跟蹤或調試。

例如,你可以嘗試:

try 
{ 
    // some code here 
} 
catch(Exception e) 
{ 
    logger.error(e); 
    // or maybe logger.error("descriptive message: " + e); 

    logger.debug("Additional info on error", e); 

    // if that fails you could try: 
    StringWriter strWriter = new StringWriter(); 
    e.printStackTrace(new PrintWriter(strWriter)); 
    logger.debug("Additional info on error", strWriter.toString()); 

    // or, I can't remember if you said fill in stack trace worked. 
    // The point is that you should use debug to log the stack trace 
    // as the information is to help you debug and isn't otherwise 
    // useful information 
    logger.debug("Additional info on error", e.fillInStackTrace()); 
} 

我添加了一個修復,因此堆棧跟蹤應打印。這有點笨重,但由於異常很罕見,因此不應增加任何可觀的開銷。

+0

它不打印整個堆棧的日誌文件它只是印刷[2012-03-15 14:52:31046] [INFO] [HTTP-0.0.0.0-8080-3] [exampleservice.java:500] \t - ERROR:Exceptoin名 – 2012-03-15 09:26:24

+0

@vijayakumar我做了一個編輯,可以幫助。但是如果沒有「DEBUG」輸出,那麼你的記錄器不記錄調試輸出,你需要修改你的配置。 – Dunes 2012-03-15 10:39:08