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


85

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

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

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

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

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

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

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


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

Ответы:


132

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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.