Как регистрировать исключение и сообщение с заполнителями с SLF4J

85

Каков правильный подход к регистрации как сообщения об ошибке, так и исключения с помощью SLF4J ?

Я пробовал это сделать, но трассировка стека исключений никогда не печатается:

logger.error("Unable to parse data {}", inputMessage, e);

В этом случае я хочу , чтобы заполнить {}с inputMessage, а также выходом из за StackTrace исключения.

Единственный способ, которым я могу это сделать, - это сделать следующее:

logger.error("Unable to parse data " + inputMessage, e);

что некрасиво.

pjp
источник
Ваша первая строка logger.error работает так, как вы хотите, в slf4j версии 1.7.25.
kiml42

Ответы:

132

Начиная с SLF4J версии 1.6, SLF4J интерпретирует последний параметр так, как вы предполагали, то есть как исключение. Вы должны использовать более старую версию SLF4J API.

Ceki
источник
7
Это описано в Javadoc? Я ожидал найти похожую информацию здесь: slf4j.org/apidocs/org/slf4j/Logger.html
Scot
2
Я верю вам, но, как и @Scot, я надеялся, что такое поведение будет задокументировано.
Стефан
4
Скот, @Stephan - вышеупомянутое поведение, похоже, задокументировано в их FAQ здесь .
Прииду Нимре 01
8
Это как самый лучший секрет. Спасибо, что указали на это. У меня следующий вопрос: почему они скрывают тот факт, что это возможно в var-arg? Почему они не могут создать новый перегруженный метод, который принимает, Throwableа после этого имеет аргумент var-arg? Есть проблемы со стиранием? Это стандарт в других библиотеках, чтобы исключение передавалось в качестве последнего аргумента?
gaoagong 08
7
Это (с тех пор?) Задокументировано в FAQ: slf4j.org/faq.html#paramException . Я согласен с тем, что эту функцию следует более четко задокументировать.
Stephan202