是否有一个字符串格式化程序将使用与 SLF4J 相同的语法?

Is there a string formatter that will use the same syntax as SLF4J?

我(显然)熟悉 String.format()MessageText.format() - 我也理解 Slf4j 日志记录中使用的字符串格式化语法;令人沮丧的是,它们各不相同且互不相容。

我正在寻找的是一个类似于 MessageText.format() 的函数,它与 slf4j 记录器的格式化程序完全一样,因此我可以在日志消息和(例如)异常中使用相同的字符串常量消息:

public static String THIS_HAPPENED = 
        "Unfortunately, foo was {}, but bar ({}) was not";

// ...

if (someDisaster(foo, bar)) {
    log.error(THIS_HAPPENED, foo, bar);
    throw new IllegalStateException(MessageText.betterFormat(THIS_HAPPENED,
                                                                 foo, bar));
}

不幸的是,MessageText 需要位置说明符 ({0}) 而 Slf4j 非常讨厌它。

有什么东西可以做到这一点吗?

(很明显,很明显!,我可以自己写这个方法,但如果已经有比我更好的程序员完成了,我会很乐意改用它)。

非常感谢。

尝试:

import org.slf4j.helpers.MessageFormatter;

你有:

MessageFormatter.format(messagePattern, arg).getMessage();