[英]Substituting parameters in log message and add a Throwable in Log4j 2
[英]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 類的工作方式。
此外,在 Log4j 2.13.0 中添加了對 LogBuilder 的支持,它允許您執行
logger.atError().withException(ex).log("Error removing token for account {}", account);
這更清楚一點。 請注意,將調用以下所有方法,但如果未記錄錯誤級別,則 atError() 之后的所有方法都是無操作的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.