需求:打印error時(shí),既想打印帶參數(shù)的字符串,也想打印異常堆棧信息
Answer:只需調(diào)用log.error格式化字符串,并且把堆棧信息參數(shù)e放到最后一個(gè)即可
@Slf4j
public class LogTest {
@Test
public void testLog() {
String s = "Hello world";
try {
Integer i = Integer.valueOf(s);
} catch (NumberFormatException e) {
// 異常堆棧必須是最后一個(gè)參數(shù)
log.error("Failed to format {}", s, e);
// log.error("Failed to format {}", e, s);
}
}
}
Why?
跟隨debug的腳步,我們會(huì)來到下面這個(gè)方法內(nèi)部:

image-20191118155221581
顯而易見,當(dāng)判斷傳入的格式化參數(shù)數(shù)組的最后一個(gè)參數(shù)繼承自Throwable類時(shí),就會(huì)將其識(shí)別出堆棧信息供打印日志
github:https://github.com/xdlkc