registros - pasar un arreglo de objetos como parametro en java
slf4j: cómo registrar mensajes con formato, matriz de objetos, excepción (2)
¿Cuál es el enfoque correcto para registrar tanto un mensaje rellenado como un seguimiento de pila de la excepción?
logger.error(
"/ncontext info one two three: {} {} {}/n",
new Object[] {"1", "2", "3"},
new Exception("something went wrong"));
Me gustaría producir una salida similar a esto:
context info one two three: 1 2 3
java.lang.Exception: something went wrong
stacktrace 0
stacktrace 1
stacktrace ...
slf4j versión 1.6.1
A partir de SLF4J 1.6.0, en presencia de múltiples parámetros y si el último argumento en una declaración de registro es una excepción, SLF4J supondrá que el usuario desea que el último argumento se trate como una excepción y no como un parámetro simple. Consulte también la entrada de preguntas frecuentes correspondiente .
Entonces, escribiendo (en SLF4J versión 1.7.xy posterior)
logger.error("one two three: {} {} {}", "a", "b",
"c", new Exception("something went wrong"));
o escribiendo (en SLF4J versión 1.6.x)
logger.error("one two three: {} {} {}", new Object[] {"a", "b",
"c", new Exception("something went wrong")});
rendirá
one two three: a b c
java.lang.Exception: something went wrong
at Example.main(Example.java:13)
at java.lang.reflect.Method.invoke(Method.java:597)
at ...
El resultado exacto dependerá del marco subyacente (por ejemplo, logback, log4j, etc.), así como de cómo se configura el marco subyacente. Sin embargo, si el último parámetro es una excepción, se interpretará como tal, independientemente del marco subyacente.
Además de la respuesta de @Ceki, si usa logback y configura un archivo de configuración en su proyecto (generalmente logback.xml), puede definir el registro para trazar el seguimiento de la pila usando también
<encoder>
<pattern>%date |%-5level| [%thread] [%file:%line] - %msg%n%ex{full}</pattern>
</encoder>
El% ex en patrón es lo que hace la diferencia.