So protokollieren Sie Ausnahmen und Nachrichten mit Platzhaltern mit SLF4J

83

Was ist der richtige Ansatz, um sowohl eine Fehlermeldung als auch eine Ausnahme mit SLF4J zu protokollieren ?

Ich habe versucht, dies zu tun, aber der Exception-Stack-Trace wird nie gedruckt:

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

In diesem Fall möchte ich den Exception-Stacktrace {}mit dem inputMessagesowie dem Abmelden füllen.

Der einzige Weg, den ich sehen kann, um dies zu tun, wäre dies zu tun:

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

das ist nicht schön.

pjp
quelle
Ihre erste logger.error-Zeile funktioniert in slf4j Version 1.7.25 wie gewünscht.
Kiml42

Antworten:

130

Ab SLF4J Version 1.6 interpretiert SLF4J den letzten Parameter wie beabsichtigt, dh als Ausnahme. Sie müssen eine ältere Version der SLF4J-API verwenden.

Ceki
quelle
7
Ist das im Javadoc beschrieben? Ich hatte erwartet, ähnliche Informationen hier zu finden: slf4j.org/apidocs/org/slf4j/Logger.html
Scot
1
Ich glaube Ihnen, aber wie bei @Scot hatte ich gehofft, dass dieses Verhalten dokumentiert wird.
Stephan
4
Scot, @Stephan - das oben erwähnte Verhalten scheint in ihren FAQ hier dokumentiert zu sein .
Priidu Neemre
8
Dies ist wie ein bestgehütetes Geheimnis. Vielen Dank für den Hinweis. Meine Folgefrage ist, warum sie die Tatsache verbergen sollten, dass dies in einem var-arg möglich ist. Warum können sie keine neue überladene Methode erstellen, die das nimmt Throwableund danach ein var-arg hat? Gibt es Löschprobleme? Ist dies ein Standard in anderen Bibliotheken, bei dem die Ausnahme als letztes Argument übergeben wird?
Gaoagong
7
Dies wurde (seit?) In den FAQ dokumentiert: slf4j.org/faq.html#paramException . Ich bin damit einverstanden, dass diese Funktion klarer dokumentiert werden sollte.
Stephan202