Qual é a abordagem correta para registrar uma mensagem preenchida e um rastreamento de pilha da exceção?
logger.error(
"\ncontext info one two three: {} {} {}\n",
new Object[] {"1", "2", "3"},
new Exception("something went wrong"));
Eu gostaria de produzir uma saída semelhante a esta:
context info one two three: 1 2 3
java.lang.Exception: something went wrong
stacktrace 0
stacktrace 1
stacktrace ...
slf4j versão 1.6.1
{}
mais, a questão do gosto ...toString()
método dos argumentos pode ser caro. Com essa sintaxe, apenas uma referência a cada objeto é passada e otoString()
método é chamado apenas se a mensagem específica estiver realmente sendo registrada. Objetos referenciados em umainfo()
chamada de log não terão seutoString()
método chamado se o nível de log forWARN
superior ou superior. A{}
sintaxe é um lembrete para os usuários de que essa não é umaString.format()
operação semelhante, ou seja, eles devem passar objetos em vez de representações de cadeias de caracteres.Respostas:
A partir do SLF4J 1.6.0, na presença de vários parâmetros e se o último argumento em uma instrução de log for uma exceção, o SLF4J presumirá que o usuário deseja que o último argumento seja tratado como uma exceção e não como um parâmetro simples. Consulte também a entrada de FAQ relevante .
Então, escrevendo (no SLF4J versão 1.7.xe posterior)
ou gravação (no SLF4J versão 1.6.x)
vai render
A saída exata dependerá da estrutura subjacente (por exemplo, logback, log4j, etc), bem como de como a estrutura subjacente está configurada. No entanto, se o último parâmetro for uma exceção, ele será interpretado como tal, independentemente da estrutura subjacente.
fonte
Logger
classe javadoc: slf4j.org/apidocs/org/slf4j/Logger.htmlAlém da resposta de @Ceki, se você estiver usando o logback e configurar um arquivo de configuração em seu projeto (geralmente logback.xml), poderá definir o log para plotar o rastreamento da pilha também usando
o% ex no padrão é o que faz a diferença
fonte