在 log4j 2 中使用 throwable 和参数
Using throwable along with parameters in log4j 2
我想用一些动态参数记录一个错误(使用 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);
尽管我必须为此编写一个辅助方法,但您可以为此单独格式化消息:
public void logException(Exception ex, String fmt, Object... args) {
Message msg = log.getMessageFactory().newMessage(fmt, args);
log.error(msg, ex);
}
实际上,几乎所有接受消息和参数的 log4j 日志记录方法也接受 Throwable。自第一个版本以来,您始终能够做到:
logger.error("Error removing token for account {}", account, ex);
请注意,格式字符串只有一个参数,因此末尾的 throwable 被记录为附加到消息的异常。这就是 ParameterizedMessage class 的工作原理。
此外,在 Log4j 2.13.0 中添加了对 LogBuilder 的支持,这样您就可以
logger.atError().withException(ex).log("Error removing token for account {}", account);
这样比较清楚。请注意,将调用以下所有方法,但如果未记录错误级别,则 atError() 之后的所有方法都是空操作。
我想用一些动态参数记录一个错误(使用 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);
尽管我必须为此编写一个辅助方法,但您可以为此单独格式化消息:
public void logException(Exception ex, String fmt, Object... args) {
Message msg = log.getMessageFactory().newMessage(fmt, args);
log.error(msg, ex);
}
实际上,几乎所有接受消息和参数的 log4j 日志记录方法也接受 Throwable。自第一个版本以来,您始终能够做到:
logger.error("Error removing token for account {}", account, ex);
请注意,格式字符串只有一个参数,因此末尾的 throwable 被记录为附加到消息的异常。这就是 ParameterizedMessage class 的工作原理。
此外,在 Log4j 2.13.0 中添加了对 LogBuilder 的支持,这样您就可以
logger.atError().withException(ex).log("Error removing token for account {}", account);
这样比较清楚。请注意,将调用以下所有方法,但如果未记录错误级别,则 atError() 之后的所有方法都是空操作。