Як реєструвати винятки та повідомлення із заповнювачами за допомогою SLF4J


85

Який правильний підхід до реєстрації як повідомлення про помилку, так і винятку за допомогою SLF4J ?

Я спробував це зробити, але трасування стека винятків ніколи не друкується:

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

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

Єдиний спосіб, яким я можу це зробити, це зробити:

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

що не красиво.


Ваш рядок fist logger.error працює так, як вам хочеться, у slf4j версії 1.7.25.
kiml42,

Відповіді:


131

Починаючи з SLF4J версії 1.6, SLF4J буде інтерпретувати останній параметр, як ви задумали, тобто як виняток. Ви повинні використовувати стару версію API SLF4J.


7
Це описано в Javadoc? Я очікував знайти подібну інформацію тут: slf4j.org/apidocs/org/slf4j/Logger.html
шотландець

2
Я вірю вам, але, як @Scot, я сподівався, що така поведінка буде задокументована.
Stephan

4
Шотландія, @Stephan - згадана поведінка, схоже, задокументована у їхніх поширених запитаннях тут .
Priidu Neemre

8
Це як найкраще зберігається таємниця. Дякуємо, що вказали на це. Моє подальше запитання - чому вони приховують той факт, що це можливо у варіантах? Чому вони не можуть створити новий перевантажений метод, який приймає, Throwableа потім має var-arg після цього? Чи є проблеми зі стиранням? Чи є це стандартом в інших бібліотеках, щоб виключення було передано як останній аргумент?
gaoagong

7
Це (з?) Було задокументовано у поширених запитаннях: slf4j.org/faq.html#paramException . Я погоджуюсь, що цю особливість слід документувати більш чітко.
Stephan202,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.