有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java堆栈跟踪未使用log4j2打印

我相信这是一个简单的解决办法,但我一辈子都不知道为什么。我得到了随机的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>

爪哇:

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

共 (1) 个答案

  1. # 1 楼答案

    通过log4j.error(e),您实际上是在调用info(Object message)方法,该方法不会额外处理Exception

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

    例如,您只需将catch块中的行更改为:

    log4j.error("", e);