如何使用格式,参数和抛出日志?

时间:2014-11-19 12:38:38

标签: logging slf4j

Logger中,我认为我无法找到任何使用格式化消息和throwable报告的方法。

我找到了

error(String format, Object... arguments) 
error(String msg, Throwable t) 
try {
    doSomething(arg1, arg2);
} catch (final SomeException se) {
    logger.error("Failed to do something with {} and {}", arg1, arg2);
    logger.error("Failed to do something", se);
}

有没有办法这样做?

logger.error("Failed to do something with {} and {}", new Object[]{arg1, arg2}, se);

1 个答案:

答案 0 :(得分:4)

不要害怕,只要这样做! SLF4J足够聪明。如果您提供的参数多于占位符,则记录器将尝试将最后一个参数强制转换为Throwable。如果成功,那么您将在日志中获得一个很好的堆栈跟踪。此功能是在SLF4J版本1.6.0中引入的 - 请参阅http://www.slf4j.org/news.htmlhttp://www.slf4j.org/faq.html#paramException

如下所示的用法很好:

logger.error("one {} two {} error", new Object[] { 1, 2, new RuntimeException("stack trace") });

从版本1.7.0开始,有新的varargs重载,因此您只需使用

即可
logger.error("one {} two {} error", 1, 2, new RuntimeException("stack trace"));