【发布时间】:2019-10-12 23:26:25
【问题描述】:
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
我知道获取异常详细信息的方法,我想了解这种行为。这是怎么发生的?记录器是否忽略传递的参数?
【问题讨论】:
-
试试
Level.ERROR,因为WARN可能不会自动记录异常堆栈跟踪等 -
尝试 Logger.error() 获取异常。
-
@GamingFelix 你知道 log4j 是如何工作的吗?查看logging.apache.org/log4j/2.0/log4j-api/apidocs/org/apache/… 如果堆栈跟踪采用您的日志记录格式,并且您将异常作为最后一个参数传递,则它应该打印出堆栈跟踪。如果您使用的是日志库,则永远不要自己调用 e.stacktrace - 日志库决定是否显示堆栈跟踪。
-
查看日志格式/模式,确保您没有抑制堆栈跟踪。见:stackoverflow.com/questions/37206067/…
-
啊,是的,我知道它是如何工作的。我没有看到它是 log4j,我自己以前也遇到过这个问题。你是对的,它是关于当你发送它时异常是什么参数:)这可能是他的问题。也许它实际上并不意味着是最后一个论点。但我真的没有看到它说它在任何地方都是 log4j
标签: java exception logging log4j