记录器仅打印日志消息,而不显示异常

时间:2019-05-27 11:29:02

标签: java exception logging log4j

try {
   // some code
}
catch (Exception e) {
   Logger.log(Level.WARN, "Unable to complete the job. ID: " + id, e);
}

因此,很明显,开发人员希望如果出现问题,它将记录异常(异常类型和堆栈跟踪)

这是我得到的日志打印

[27 May 2019 13:30:07][http-nio-8080-exec-13][WARN]: Unable to complete the job. ID: 123457890

这是Log4j配置

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=debug.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%d{dd MMM yyyy HH:mm:ss}][%t][%p]: %m%n

我知道获取异常详细信息的方法,我想了解这种行为。这是怎么发生的?记录器会忽略传递的参数吗?

2 个答案:

答案 0 :(得分:0)

我唯一的猜测是发生这种情况是由于热点优化

  

服务器VM中的编译器现在为所有“冷”内置异常提供正确的堆栈回溯。为了提高性能,当几次抛出此类异常时,可以重新编译该方法。重新编译后,编译器可以使用不提供堆栈跟踪的预分配异常来选择更快的策略。要完全禁止使用预分配的异常,请使用以下新标志:-XX:-OmitStackTraceInFastThrow。

这是从以下相关问题的答案中借来的:

log4j not printing the stacktrace for exceptions

答案 1 :(得分:0)

ERROR级别用于在日志文件中记录错误的堆栈跟踪。

尝试使用。

    try {
        // some code
    } catch (Exception e) {
       Logger.log(Level.ERROR, "Unable to complete the job. ID: " + id, e);
    }

如果仍然无法使用,请共享您的日志记录库。会检查一下。

相关问题