在将一些旧记录器从String.format
转换为较新的slf4j {}变体的过程中,我偶然发现了这种情况:
logger.error(String.format("%s ... %s ... %s", ...), e);
我只想使用{}并删除String格式,但是, 包含throwable的记录器方法签名是:
error(String msg, Throwable t)
所以我必须在这种情况下保留String.format
?
为什么没有:
error(Throwable t, String format, Object... arguments)
答案 0 :(得分:18)
从SLF4J 1.6.0开始,如果存在多个参数,并且如果日志语句中的最后一个参数是异常,则SLF4J将假定用户希望将最后一个参数视为异常而不是简单参数。
所以,写(在SLF4J版本1.7.x及更高版本中)
logger.error("one two three: {} {} {}", "a", "b",
"c", new Exception("something went wrong"));
会做你想要达到的目标......