首页 > 解决方案 > log4j 1.x 中错误方法的区别

问题描述

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

String errorMessage =" Problem with server "+"\n"+t.getMessage();
_logger.fatal(errorMessage);

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

我想知道的是,如果我使用_logger.fatal(errorMessage, t);代替会发生什么变化_logger.fatal(errorMessage);?如果它们之间存在重大差异,那么使用哪个更好?

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

标签: javalogginglog4j

解决方案


几乎所有的 Java 日志框架(唉,我们有很多……)都支持将 aThrowable作为最后一个参数。

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

如果异常的原因确实已经确定并且打印异常只是不必要的噪音,我永远不会向记录器提供异常。例如这里:

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()因为除了其消息(可能为空)之外,它还包括异常的名称。


推荐阅读