Esto parece un error de descuido, pero parece que no puedo encontrar la causa. Registro con logback / slf4j (versión más reciente slf4j-api-1.6.1, logback core / classic 0.9.24). La configuración de registro más simple para la prueba es:
<configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<!-- DONT USE THIS FORMATTER FOR LIVE LOGGING THE %L LINE NUMBER OUTPUTTER IS SLOW -->
<pattern>%le %-1r [%c{1}:%L] %m%n</pattern>
</layout>
</appender>
<root level="DEBUG">
<appender-ref ref="stdout" />
</root>
</configuration>
Cada configuración de registro comienza con las líneas de estado internas del registro:
11:21:27,825 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
11:21:27,826 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:.../logback-test.xml]
11:21:28,116 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
11:21:28,124 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
11:21:28,129 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [stdout]
11:21:28,180 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Pushing component [layout] on top of the object stack.
11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - This appender no longer admits a layout as a sub-component, set an encoder instead.
11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
11:21:28,207 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
11:21:28,207 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [stdout] to Logger[ROOT]
que es, de acuerdo con los documentos, el formato de inicio de sesión utiliza por defecto. Luego termina de leer la configuración (que está configurada para generar un formato diferente) y continúa con la salida con el formato correcto. Hay un parámetro de configuración <configuration debug="false">
que no afecta esto.
¿Alguien sabe cómo apagar esto?
Respuestas:
Si establece el
debug
atributo delconfiguration
elemento entrue
, obtendrá toda la información de estado en la consola. Si este es su problema, simplemente configúrelo como falso o elimínelo.Si tiene algún problema de configuración de nivel
WARN
o superior, también obtendrá toda la información de estado registrada en la consola (incluidos los mensajes de nivelINFO
). La mejor solución a este problema es solucionar el problema (en su caso, reemplace el<layout>
elemento con un<encoder>
elemento).Si por alguna razón no puede solucionar el problema, pero desea eliminar la información de estado de la consola, puede configurar una alternativa
StatusListener
. UseNopStatusListener
para eliminar completamente la información de estado:fuente
INFO
mensajes de registro también desaparecerían, pero de hecho lo hacen. Sé que la respuesta dice esto, pero por alguna razón no estaba claro para mí. Para ser tan claro: solucione el problema del codificador / diseño y no solo desaparecerán los mensajes de advertencia, sino que también desaparecerán los mensajes de información, aunque no estén relacionados con el problema.Como se describe en los documentos , si se producen advertencias o errores durante el análisis del archivo de configuración, el inicio de sesión imprimirá automáticamente los datos de estado en la consola.
Siga http://logback.qos.ch/codes.html#layoutInsteadOfEncoder, es decir, el enlace mencionado por logback en su mensaje de advertencia. Una vez que siga los pasos mencionados allí, es decir, si reemplaza el elemento <layout> con <encoder>, el inicio de sesión dejará de imprimir mensajes en la consola.
fuente
debug="true"
atributo en elconfiguration
elemento delogback.xml
. ¡Mencione esto en beneficio de otras personas que caen en este agujero!La respuesta de Ceki es correcta:
Una vez que lo haga bien, ya no habrá contaminación en las primeras líneas de su registro.
A partir de marzo de 2015, en Logback 1.1.2 , debe usar
<encoder>
un subcomponente:<layout>
ahora está en desuso y, si lo usa, aparecerán mensajes de error. No puede controlar esto, es el comportamiento predeterminado de Logback .Algunas clases internas también han sido renombradas, ¡e incluso los ejemplos en su página de manual están desactualizados!
Aquí está el fragmento de código de su página de Ayuda de Código de Errores , que tiene la forma correcta de configurar el registrador. Esto solucionó el problema por completo en mi proyecto. http://logback.qos.ch/codes.html#layoutInsteadOfEncoder
fuente
Me di cuenta de que Steve encontró la solución, pero no la mencionó en el hilo. En caso de que otra persona tenga el mismo problema, aquí está la solución.
Reemplace los elementos "<layout>" con "<encoder> .. </encoder>"
El culpable es: <layout class = "ch.qos.logback.classic.PatternLayout">
fuente
Luché con el mismo problema, es decir, había un montón de líneas registradas al principio que no estaban relacionadas con mi código. Así es como lo arreglé.
Esto se ejecuta con la siguiente entrada en pom.xml
fuente
Esto parece estar solucionado en 0.9.29. Acabo de hacer varias pruebas. No Joran INFO más. Supongo que este es el commit de fijación.
fuente
Tuve el mismo problema agregué esta línea
en el inicio de sesión y funcionó con éxito
fuente
He intentado todo y nada funcionó para mí. Mi problema se debió a múltiples archivos logback.xml en mi classpath. Este es el caso común en proyectos multi modulares. Cuando solo hay un archivo logback.xml en classpath, no hay ambigüedad y el problema está resuelto.
fuente
Usando el
logback.groovy
:statusListener(NopStatusListener)
(en elsrc/test/resources/logback.groovy
) funciona.(Un caso de uso válido es, por ejemplo, si se trabaja con ANT en Eclipse, utilizando el registro de inicio de sesión, clases maravillosas y pruebas unitarias donde las pruebas unitarias toman el
src/test/resources/logback.groovy
, pero también verá elsrc/main/resources/logback.groovy
(o similar) que no puede excluir (si se dice que el classpath de ANT usa los proyectos classpath).)fuente
Prefiero usar el detector de estado para desactivar los registros de inicio de sesión propios:
Pero como se mencionó, NopStatusListener también evita mostrar advertencias y errores. Para que pueda escribir su escucha de estado personalizado y cambiar el nivel de registro de forma manual:
Luego utilícelo en su archivo logback.xml:
fuente