Come registrare eccezioni e messaggi con segnaposto con SLF4J


85

Qual è l'approccio corretto per registrare sia un messaggio di errore che un'eccezione utilizzando SLF4J ?

Ho provato a farlo ma la traccia dello stack delle eccezioni non viene mai stampata:

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

In questo caso voglio per popolare {}con il inputMessagecosì come il logout StackTrace eccezione.

L'unico modo in cui posso vedere per farlo sarebbe farlo:

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

che non è carino.


La tua prima riga logger.error funziona come vuoi nella versione 1.7.25 di slf4j.
kiml42

Risposte:


132

A partire dalla versione 1.6 di SLF4J, SLF4J interpreterà l'ultimo parametro come previsto, ovvero come un'eccezione. È necessario utilizzare una versione precedente dell'API SLF4J.


7
È descritto nel Javadoc? Mi aspettavo di trovare informazioni simili qui: slf4j.org/apidocs/org/slf4j/Logger.html
Scot

2
Ti credo, ma come @Scot, speravo che questo comportamento sarebbe stato documentato.
Stephan

4
Scot, @Stephan - il comportamento di cui sopra sembra essere documentato nelle loro FAQ qui .
Priidu Neemre

8
Questo è come un segreto meglio custodito. Grazie per segnalarlo. La mia domanda di follow-up è perché dovrebbero nascondere il fatto che questo è possibile in un var-arg? Perché non possono creare un nuovo metodo sovraccarico che accetta Throwablee poi ha un var-arg dopo? Ci sono problemi di cancellazione? È uno standard in altre librerie per cui l'eccezione è passata come ultimo argomento?
gaoagong

7
Questo è stato (da allora?) Documentato nelle FAQ: slf4j.org/faq.html#paramException . Sono d'accordo che questa caratteristica dovrebbe essere documentata più chiaramente.
Stephan202
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.