2017-07-12 55 views
4

在從String.format轉換一些舊記錄器到較新的SLF4J {}變體的過程中,我偶然發現此情況下:記錄器格式和拋出,SLF4J

logger.error(String.format("%s ... %s ... %s", ...), e); 

我想只{}使用和除去字符串格式,但是, 其中包括拋出該記錄方法的簽名是:

error(String msg, Throwable t)

所以我必須保持在這種情況下,String.format?!

爲什麼沒有:

error(Throwable t, String format, Object... arguments)

+0

嗯實際上存在重複這裏:https://開頭計算器.com/questions/6371638/slf4j-how-to-log-formatted-message-object-array-exception,但它在標題中使用了不同的關鍵字......也許我會幫助其他人搜索 –

+0

[slf4j:how記錄格式化消息,對象數組,異常](https://stackoverflow.com/questions/6371638/slf4j-how-to-log-formatted-message-object-array-exception) – jmehrens

+0

@jmehre ns正好是我發佈在你上面的評論中的鏈接 –

回答

7

由於SLF4J 1.6.0,在多個參數的情況下,如果在一個日誌聲明最後一個參數是一個例外,那麼SLF4J將推定的用戶希望將最後一個參數視爲異常而不是簡單的參數。

所以,(在SLF4J 1.7.x版及更高版本)

logger.error("one two three: {} {} {}", "a", "b", 
      "c", new Exception("something went wrong")); 

會做你想要達到什麼樣的...編寫

+0

好吧,那麼它是在幕後聰明:) –