记录器格式和可抛出,slf4j,参数

2022-09-02 01:07:13

在将一些旧的记录器从转换为较新的slf4j {}变体的过程中,我偶然发现了这种情况:String.format

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

我想只使用{}并删除String格式,但是,包含可抛出物的记录器方法签名是:

error(String msg, Throwable t)

所以在这种情况下,我必须保留?!String.format

为什么没有:

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


答案 1

从 SLF4J 1.6.0 开始,如果存在多个参数,并且日志记录语句中的最后一个参数是异常,则 SLF4J 将假定用户希望将最后一个参数视为异常而不是简单参数。

所以,写作(在SLF4J版本1.6.x及更高版本中)

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

http://www.slf4j.org/faq.html#paramException

“是的,从SLF4J 1.6.0开始,但在以前的版本中没有。SLF4J API支持在存在异常的情况下进行参数化,假设异常是最后一个参数。


答案 2

推荐