log4j 中错误方法之间的差异 1.x
Differences between error methods in 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);
会有什么变化?如果它们之间存在重大差异,使用哪个更好?
编辑:我刚刚意识到我复制了 "fatal" 示例而不是 "error"。但是我的问题也是致命的。
几乎所有 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);
}
另一种情况是异常被重新抛出(其他东西最终会更详细地记录它)。
但没有 "Problem with server"(并且在 FATAL 级别也不少)。看来您想获取尽可能多的信息。
另请注意,在这些情况下,e.toString()
通常比 e.getMessage()
更好,因为除了消息(可能为空)之外,它还包含异常的名称。
在我工作的项目的日志记录部分,我尝试优化日志管理中显示的错误消息。记录错误消息的编码如下:
String errorMessage =" Problem with server "+"\n"+t.getMessage();
_logger.fatal(errorMessage);
其中t为Throwable对象,_logger为Logger对象,与log4j框架相关
我想知道的是,如果我使用 _logger.fatal(errorMessage, t);
而不是 _logger.fatal(errorMessage);
会有什么变化?如果它们之间存在重大差异,使用哪个更好?
编辑:我刚刚意识到我复制了 "fatal" 示例而不是 "error"。但是我的问题也是致命的。
几乎所有 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);
}
另一种情况是异常被重新抛出(其他东西最终会更详细地记录它)。
但没有 "Problem with server"(并且在 FATAL 级别也不少)。看来您想获取尽可能多的信息。
另请注意,在这些情况下,e.toString()
通常比 e.getMessage()
更好,因为除了消息(可能为空)之外,它还包含异常的名称。