log4j 1.x中错误方法之间的差异

时间:2018-11-14 12:10:27

标签: java logging log4j

在我工作的项目的日志记录部分,我尝试优化日志管理中显示的错误消息。记录错误消息的代码如下:

fun Application.module() {
    install(DefaultHeaders)
    install(CallLogging)
    install(Routing) {

        get("/") {
            call.respondText(/*Content of that url in the output ?*/, ContentType.Text.Any)
        }
    }
}

其中t是一个Throwable对象,_logger是一个Logger对象,与log4j框架有关。

我想知道的是,如果我使用String errorMessage =" Problem with server "+"\n"+t.getMessage(); _logger.fatal(errorMessage); 而不是_logger.fatal(errorMessage, t);会发生什么变化?如果它们之间有很大的不同,那么哪个更好使用?

编辑:我刚刚意识到我复制了“致命”示例而不是“错误”。但是我的问题也同样致命。

1 个答案:

答案 0 :(得分:1)

实际上,所有Java日志记录框架(哎呀,我们有很多...)支持将Throwable作为最后一个参数。

这将导致记录堆栈跟踪,这对于诊断和修复问题非常有用。

如果异常的原因确实很明确并且打印异常只是不必要的噪音,我绝不会将异常提供给记录器。例如此处:

try {
   int port = Integer.parseInt(input);
   // do something with the port
} catch (NumberFormatException e) {
   logger.error("'{}' is not a valid port number: {}", input, e.toString);
}

另一种情况是重新抛出异常时(其他情况最终将更详细地记录该异常)。

但不是“服务器问题”(并且在致命级别以上)。看来您想获取尽可能多的信息。

还要注意,在这些情况下,e.toString()通常比e.getMessage()更好,因为它在消息中还包含异常的名称(可能为空)。