Log4j无法打印堆栈跟踪信息。

5
我捕获了NullPointerException,但log4j没有打印堆栈跟踪信息,我希望能够输出异常发生的行数,这是怎么回事?
我的日志:
20110412-101042,317[ Timer-7][R] Exception while processing for value: abc.                  [xyz.Dummy]
java.lang.NullPointerException

log4j.property file

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个回答

4
问题出在您的布局中的%-70m。它截断了消息,因此无法到达堆栈跟踪。请像往常一样使用%m
更好的方法是编写自定义布局,这将按照您的要求工作。

我编写了一个简单的代码,但 %-70m 没有导致任何截断。使用相同的log4j属性输出如下。Printstacktrace正确地编写,没有任何截断。 - Erdinç Taşkın

-1

-2

如果有人想要打印出空指针异常发生的行号而不是打印完整的堆栈跟踪,请尝试以下方法:

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

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接