簡體   English   中英

Log4j不打印堆棧跟蹤

[英]Log4j does not print stack trace

我捕獲NullPointerException但是log4j沒有打印堆棧跟蹤,我發生異常行的異常數等等有什么問題?

我的日志

20110412-101042,317[ Timer-7][R] Exception while processing for value: abc.                  [xyz.Dummy]
java.lang.NullPointerException

log4j.property文件

log4j.rootCategory=ERROR, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p %r [%t] : %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=my_application.log
log4j.appender.logfile.Append=true
log4j.appender.logfile.MaxBackupIndex =10
log4j.appender.logFile.MaxFileSize=40000KB
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyyMMdd-HHmmss,SSS}[%8.8t][%.1p] %-70m[%c{2}]%n

我的代碼段

String value;
try {
   value = "abc";
   //... lots for code
}catch(Exception e) {
   logger.error("Exception while processing for value: " + value + ". ", e);
}

問題是布局中的%-70m 它會截斷消息,因此無法到達堆棧跟蹤。 請照常使用%m

更好:編寫自定義布局,這將按您的意願工作。

您的代碼僅顯示異常消息。如果要查看堆棧跟蹤,則必須使用以下內容:

如何將printStackTrace存儲到字符串中

嘗試使用那個而不是例外'e'。

任何想要打印行號以知道在沒有打印完整堆棧跟蹤的情況下發生空指針異常的人,請嘗試如下:

try {
 // your code here
}catch(NullPointerException ne){
 System.out.println("NullPointerException : LineNumber:"+ne.getStackTrace()[0].getLineNumber()+" : "+ne);

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM