Java堆栈跟踪未使用log4j2打印

4
我确定这是一个简单的修复,但我无法弄清楚原因。我会随机收到NPE,并且使用log4j(2.0.2)记录错误,但是尽管在我的log4j配置文件中有%ex ,它不会打印堆栈跟踪。
11-01-2019 02:39:33.212 [Thread-307] ERROR 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);
}
1个回答

6
通过使用log4j.error(e),实际上你正在调用一个不会特别处理Exceptioninfo(Object message)方法。
但是,如果要打印堆栈跟踪,你需要调用其中的一种独立处理Throwable(Exception的超类)的变量。其中最简单的方法之一是info(CharSequence arg0, Throwable arg1)
例如,你可以轻松地更改catch块中的行:
log4j.error("", e);

太棒了。我已经重新编译并部署了JAR到服务器上。现在我们等待.... :) - Beeker
太好了,谢谢。堆栈跟踪似乎有点短,但它确定了失败的类。 - Beeker
1
尝试使用 %ex{full} 获取堆栈跟踪。 - sazzad

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