Cómo registrar excepciones y mensajes con marcadores de posición con SLF4J


85

¿Cuál es el enfoque correcto para registrar tanto un mensaje de error como una excepción usando SLF4J ?

Intenté hacer esto, pero el seguimiento de la pila de excepciones nunca se imprime:

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

En este caso, quiero completar {}con el inputMessagey cerrar la sesión de la excepción stacktrace.

La única forma que puedo ver para hacer esto sería hacer esto:

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

que no es bonito.


Su primera línea de logger.error funciona como lo desea en slf4j versión 1.7.25.
kiml42

Respuestas:


131

A partir de la versión 1.6 de SLF4J, SLF4J interpretará el último parámetro según lo previsto, es decir, como una excepción. Debe utilizar una versión anterior de la API SLF4J.


7
¿Está esto descrito en el Javadoc? Esperaba encontrar información similar aquí: slf4j.org/apidocs/org/slf4j/Logger.html
Scot

2
Te creo, pero como @Scot, esperaba que este comportamiento fuera documentado.
Stephan

4
Scot, @Stephan: el comportamiento mencionado anteriormente parece estar documentado en sus preguntas frecuentes aquí .
Priidu Neemre

8
Esto es como un secreto mejor guardado. Gracias por mencionarlo. Mi pregunta de seguimiento es ¿por qué ocultarían el hecho de que esto es posible en un var-arg? ¿Por qué no pueden crear un nuevo método sobrecargado que tome el Throwabley luego tenga un var-arg después de eso? ¿Hay problemas de borrado? ¿Es este un estándar en otras bibliotecas para que la excepción se pase como último argumento?
gaoagong

7
Esto se ha documentado (¿desde entonces?) En las preguntas frecuentes: slf4j.org/faq.html#paramException . Estoy de acuerdo en que esta característica debería documentarse con mayor claridad.
Stephan202
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.