Log4j不打印堆栈跟踪

时间:2011-04-14 11:33:48

标签: java log4j

我捕获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);
}

3 个答案:

答案 0 :(得分:4)

问题是布局中的%-70m。它会截断消息,因此无法到达堆栈跟踪。请照常使用%m

更好:编写自定义布局,这将按您的意愿工作。

答案 1 :(得分:-1)

您的代码仅显示异常消息。如果您想查看堆栈跟踪,则必须使用类似的内容:

How to store printStackTrace into a string

尝试使用那个而不是例外'e'。

答案 2 :(得分:-2)

如果有人想打印行号以了解空指针异常发生的位置而不打印完整的堆栈跟踪,请尝试如下:

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

}