首页 > 解决方案 > Java 堆栈跟踪不使用 log4j2 打印

问题描述

我确信这是一个简单的解决方法,但我一生都无法弄清楚原因。我得到随机 NPE 并让 log4j (2.0.2) 记录错误,但是尽管%ex在我的 log4j 配置文件中有,但它没有打印堆栈跟踪。

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>

爪哇:

try {
    //<Many sequential class calls>
} catch (Exception e) {
    log4j.error(e);
}

标签: javalog4j2

解决方案


log4j.error(e)您实际上是在调用不需要info(Object message)额外注意的方法Exception

但是,要打印堆栈跟踪,您需要分别调用处理Throwable(异常的超类)的变体之一。最简单的方法之一可能是info(CharSequence arg0, Throwable arg1).

例如,您可以简单地将 catch 块中的行更改为:

log4j.error("", e);

推荐阅读