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.

pjp
fuente
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.

Ceki
fuente
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