Como registrar exceção e mensagem com marcadores de posição com SLF4J

85

Qual é a abordagem correta para registrar uma mensagem de erro e uma exceção usando SLF4J ?

Eu tentei fazer isso, mas o rastreamento de pilha de exceção nunca é impresso:

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

Neste caso, desejo preencher {}com o inputMessage, bem como efetuar logout do stacktrace de exceção.

A única maneira que vejo de fazer isso é:

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

o que não é bonito.

pjp
fonte
Sua primeira linha logger.error funciona como você deseja na versão slf4j 1.7.25.
kiml42

Respostas:

132

A partir do SLF4J versão 1.6, o SLF4J interpretará o último parâmetro como você deseja, ou seja, como uma exceção. Você deve usar uma versão anterior da API SLF4J.

Ceki
fonte
7
Isso está descrito no Javadoc? Esperava encontrar informações semelhantes aqui: slf4j.org/apidocs/org/slf4j/Logger.html
Scot
2
Eu acredito em você, mas como @Scot, eu esperava que esse comportamento fosse documentado.
Stephan
4
Scot, @Stephan - o comportamento mencionado parece estar documentado em seu FAQ aqui .
Priidu Neemre,
8
Isso é como um segredo mais bem guardado. Obrigado por apontar isso. Minha pergunta complementar é por que eles esconderiam o fato de que isso é possível em um var-arg? Por que eles não podem criar um novo método sobrecarregado que leva o Throwablee depois tem um var-arg? Existem problemas de apagamento? Este é um padrão em outras bibliotecas para ter a exceção passada como o último argumento?
gaoagong
7
Isso foi (desde então?) Documentado no FAQ: slf4j.org/faq.html#paramException . Concordo que esse recurso deve ser documentado de forma mais clara.
Stephan202