Jak rejestrować wyjątek i komunikat z symbolami zastępczymi w SLF4J


85

Jakie jest prawidłowe podejście do rejestrowania zarówno komunikatu o błędzie, jak i wyjątku za pomocą SLF4J ?

Próbowałem to zrobić, ale ślad stosu wyjątków nigdy nie jest drukowany:

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

W tym przypadku chcę, aby wypełnić {}z inputMessagejak wylogowaniu się StackTrace wyjątku.

Jedynym sposobem, w jaki mogę to zrobić, byłoby zrobienie tego:

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

co nie jest ładne.


Twoja pierwsza linia logger.error działa tak, jak chcesz w slf4j w wersji 1.7.25.
kiml42

Odpowiedzi:


131

Od wersji 1.6 SLF4J, SLF4J zinterpretuje ostatni parametr zgodnie z zamierzeniami, tj. Jako wyjątek. Musisz używać starszej wersji SLF4J API.


7
Czy jest to opisane w Javadoc? Spodziewałem się znaleźć podobne informacje tutaj: slf4j.org/apidocs/org/slf4j/Logger.html
Scot

2
Wierzę ci, ale podobnie jak @Scot, miałem nadzieję, że to zachowanie zostanie udokumentowane.
Stephan

4
Scot, @Stephan - wspomniane zachowanie wydaje się być udokumentowane w ich FAQ tutaj .
Priidu Neemre

8
To jak najlepiej strzeżona tajemnica. Dzięki za wskazanie tego. Moje dalsze pytanie brzmi: dlaczego mieliby ukrywać fakt, że jest to możliwe w przypadku var-arg? Dlaczego nie mogą utworzyć nowej przeciążonej metody, która pobiera, Throwablea następnie ma zmienną argumentację? Czy są problemy z kasowaniem? Czy w innych bibliotekach jest to standard, w którym wyjątek jest przekazywany jako ostatni argument?
gaoagong

7
Zostało to (od?) Udokumentowane w FAQ: slf4j.org/faq.html#paramException . Zgadzam się, że ta funkcja powinna być lepiej udokumentowana.
Stephan202
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.