Was ist der richtige Ansatz, um sowohl eine aufgefüllte Nachricht als auch eine Stapelverfolgung der Ausnahme zu protokollieren?
logger.error(
"\ncontext info one two three: {} {} {}\n",
new Object[] {"1", "2", "3"},
new Exception("something went wrong"));
Ich möchte eine ähnliche Ausgabe erstellen:
context info one two three: 1 2 3
java.lang.Exception: something went wrong
stacktrace 0
stacktrace 1
stacktrace ...
slf4j Version 1.6.1
{}
mehr, die Frage des Geschmacks ...toString()
Methode der Argumente kann teuer sein. Mit dieser Syntax wird nur ein Verweis auf jedes Objekt übergeben und dietoString()
Methode wird nur aufgerufen, wenn die bestimmte Nachricht tatsächlich protokolliert wird. Bei Objekten, auf die in eineminfo()
Protokollaufruf verwiesen wird, wird dietoString()
Methode nicht aufgerufen, wenn die ProtokollstufeWARN
oder höher ist. Die{}
Syntax erinnert Benutzer daran, dass dies keineString.format()
ähnliche Operation ist, dh sie sollten Objekte übergeben und keine Zeichenfolgendarstellungen davon.Antworten:
Ab SLF4J 1.6.0 geht SLF4J bei Vorhandensein mehrerer Parameter und wenn das letzte Argument in einer Protokollierungsanweisung eine Ausnahme darstellt, davon aus, dass der Benutzer möchte, dass das letzte Argument als Ausnahme und nicht als einfacher Parameter behandelt wird. Siehe auch den entsprechenden FAQ-Eintrag .
Also schreiben (in SLF4J Version 1.7.x und höher)
oder schriftlich (in SLF4J Version 1.6.x)
wird nachgeben
Die genaue Ausgabe hängt vom zugrunde liegenden Framework (z. B. Logback, log4j usw.) sowie von der Konfiguration des zugrunde liegenden Frameworks ab. Wenn der letzte Parameter jedoch eine Ausnahme darstellt, wird er unabhängig vom zugrunde liegenden Framework als solcher interpretiert.
quelle
Logger
Javadoc-Klasse: slf4j.org/apidocs/org/slf4j/Logger.htmlZusätzlich zu @Cekis Antwort: Wenn Sie Logback verwenden und eine Konfigurationsdatei in Ihrem Projekt einrichten (normalerweise logback.xml), können Sie das Protokoll definieren, um auch den Stack-Trace zu zeichnen
Das% ex im Muster macht den Unterschied
quelle