我确信这是一个简单的解决方法,但是我一生都无法找出原因。我得到的是随机NPE,并且log4j(2.0.2)记录了该错误,但是尽管我的log4j配置文件中有%ex
,但它没有打印堆栈跟踪。
11-01-2019 02:39:33.212 [Thread-307]错误AlarmParse.ProcessAlarm:java.lang.NullPointerException-
Log4j2配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration monitorInterval="30" status="INFO">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg - %ex%n"/>
</Console>
<File name="MyFile" fileName="G:/iMCAlarmParse/logs/AppLog.log">
<PatternLayout pattern="%d{MM-dd-yyyy HH:mm:ss.SSS} [%t] %-5level %c{2}: %msg - %ex%n"/>
</File>
Java:
try {
//<Many sequential class calls>
} catch (Exception e) {
log4j.error(e);
}
答案 0 :(得分:2)
通过log4j.error(e)
,您实际上是在调用info(Object message)
方法,而该方法不需要特别注意Exception
。
但是,要打印堆栈跟踪,您需要调用分别处理Throwable
(Exception的超类)的变体之一。最简单的方法之一就是info(CharSequence arg0, Throwable arg1)
。
例如您只需将catch块中的行更改为:
log4j.error("", e);