为了账号安全,请及时绑定邮箱和手机立即绑定

在 log4j 2 中使用 throwable 和参数

在 log4j 2 中使用 throwable 和参数

繁星点点滴滴 2021-06-16 18:14:49
我想用一些动态参数记录一个错误(使用 log4j 2),以便更好地理解出了什么问题,我面临的问题是没有像这样的方法:void error(String message, Throwable t);带参数支持。在我的代码中,我希望异常和参数都在消息中填充 {}:    try {        //...    } catch (Exception e) {        LOGGER.error("Error removing data for account {}", accountId, e);    }有没有更好的方法来实现它而不是像这样使用它?LOGGER.error("Error removing token for account " + accountId, e);
查看完整描述

2 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

您可以为此单独格式化消息,但我必须为它编写一个辅助方法:


public void logException(Exception ex, String fmt, Object... args) {

    Message msg = log.getMessageFactory().newMessage(fmt, args);

    log.error(msg, ex);

}


查看完整回答
反对 回复 2021-06-30
?
倚天杖

TA贡献1828条经验 获得超3个赞

实际上,几乎所有接受消息和参数的 log4j 日志记录方法也接受 Throwable。自第一个版本以来,您一直能够做到:

logger.error("Error removing token for account {}", account, ex);

请注意,格式字符串只有一个参数,因此最后的 throwable 被记录为附加到消息的异常。这就是 ParameterizedMessage 类的工作方式。

此外,Log4j 2.13.0 中添加了对 LogBuilder 的支持,允许您执行

logger.atError().withException(ex).log("Error removing token for account {}", account);

这更清楚一点。请注意,将调用以下所有方法,但如果未记录错误级别,则 atError() 之后的所有方法都是无操作的。


查看完整回答
反对 回复 2021-06-30
  • 2 回答
  • 0 关注
  • 265 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信