Трассировка стека Java не печатается с помощью log4j2 - PullRequest
2 голосов
/ 01 ноября 2019

Я уверен, что это простое исправление, но я не могу понять почему. Я получаю случайные NPE, и log4j (2.0.2) регистрирует ошибку, однако, несмотря на наличие %ex в моем файле конфигурации log4j, он не печатает трассировку стека.

11-01-201902: 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 Ответ

1 голос
/ 04 ноября 2019

По log4j.error(e) вы на самом деле вызываете метод info(Object message), который не заботится о Exception.

Но, чтобы распечатать трассировку стека, вам необходимо вызвать один из вариантов, который обрабатывает Throwable (супер класс Exception) отдельно. Одним из самых простых способов для этого может быть info(CharSequence arg0, Throwable arg1).

Например, вы можете просто изменить строку в блоке catch на:

log4j.error("", e);
...