簡體   English   中英

在 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 類的工作方式。

此外,在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM