2011-04-14 249 views
6

我捕獲NullPointerException但log4j不打印堆棧跟蹤,發生異常行的方面號碼等等有什麼不對?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); 
} 

回答

4

的問題是在你的佈局中%-70m。它截斷了消息,因此沒有到達堆棧跟蹤。改爲使用%m

更好:寫一個自定義佈局,這將工作,如你所願。

+0

我寫了一個簡單的代碼,但%-70m不會引起任何截斷 輸出低於相同的log4j屬性。 Printstacktrace寫入正確,沒有任何截斷 – 2011-04-14 12:36:53

-1

如果誰想要打印的行數就知道空指針異常發生的位置不打印完整的堆棧跟蹤,請嘗試象下面這樣:

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

}