java - 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);
?如果它们之间存在重大差异,那么使用哪个更好?
编辑:我刚刚意识到我复制了“致命”示例而不是“错误”。但是我的问题对于致命的也是一样的。
解决方案
几乎所有的 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()
因为除了其消息(可能为空)之外,它还包括异常的名称。
推荐阅读
- python - Python:条件表达式中的替换表达式
- java - 注入一个填充在不同类中的bean
- ios - Firebase 存储拒绝图像删除请求:错误域=FIRStorageErrorDomain 代码=-13021“用户没有访问权限”
- java - 用于简单访问的 JPA JOIN
- latex - Latex Beamer:仅显示帧中的覆盖子集
- sql - OPENQUERY 中无法识别数值错误
- python - 按状态汇总的 Pandas 值计数
- javascript - 如何使用另一个嵌套对象更新嵌套对象?
- javascript - 制作我自己的 API,对如何向服务器进行身份验证感到困惑
- html - 向左阻塞,向右内联