resuelto registros registro personas pasar parametro objetos guardar datos con como arreglos arreglo alumnos java exception logging slf4j

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.