logback pattern
¿Cómo evitar que logback genere su propio estado al inicio de cada registro? (8)
Esto parece un error de descuido, pero parece que no puedo encontrar la causa. Inicio de sesión 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 las pruebas 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 de logback:
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 logback de formato utiliza por defecto. Luego, termina de leer la configuración (que está configurada para generar un formato diferente) y continúa con la salida formateada correctamente. Hay un parámetro de <configuration debug="false">
que no afecta esto.
¿Alguien sabe cómo cerrar esto?
Como se describe en los documentos , si se producen advertencias o errores durante el análisis del archivo de configuración, logback 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, es decir, si reemplaza el elemento <layout> con <encoder>, logback dejará de imprimir mensajes en la consola.
El uso de logback.groovy
: statusListener(NopStatusListener)
(en el src/test/resources/logback.groovy
) funciona.
(Un caso de uso válido es, por ejemplo, si se trabaja con ANT en Eclipse, usando logback logging, groovy classes y unit tests donde las pruebas unitarias toman el src/test/resources/logback.groovy
, pero también se verá el src/main/resources/logback.groovy
(o similar) no se puede excluir (si se dice que el classpath de ANT usa el classpath de proyectos).
Esto parece estar Corregido en 0.9.29. Acabo de hacer varias pruebas. Ya no hay información de Joran. Creo que this es el compromiso de fijación.
Lo intenté todo y nada funcionó para mí. Mi problema se debió a varios 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.
Luchamos con el mismo problema, es decir, hubo un montón de líneas registradas al principio que no estaban relacionadas con mi código. Así es como lo arreglé.
<configuration debug="false">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level
%logger{36} - %msg%n</pattern> </encoder> -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{10} - %msg%n</pattern>
</encoder>
</appender>
<root level="error">
<appender-ref ref="STDOUT" />
</root>
<logger name="fun.n.games" level="DEBUG" />
Esto se ejecuta con la siguiente entrada en el pom.xml
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
Me di cuenta de que Steve encontró la solución, pero no lo mencionó en el hilo. En caso de que otra persona haga lo mismo, aquí está la solución.
Reemplaza los elementos "<layout>" con "<encoder> .. </ encoder>" este es el culpable .. <layout class = "ch.qos.logback.classic.PatternLayout">
Si establece el atributo de debug
del elemento de configuration
en true
, obtendrá toda la información de estado en la consola. Si este es su problema, simplemente configúrelo en falso o quítelo.
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 nivel INFO
). La mejor solución para este problema es solucionar el problema (en su caso, reemplace el elemento <layout>
con un elemento <encoder>
).
Si por algún motivo no puede solucionar el problema, pero desea eliminar la información de estado de la consola, puede configurar un StatusListener
alternativo. Use NopStatusListener
para eliminar por completo la información de estado:
<configuration>
<statusListener class="ch.qos.logback.core.status.NopStatusListener" />
<!-- etc -->
</configuration>
La respuesta de Ceki es correcta:
(...) si se producen advertencias o errores durante el análisis del archivo de configuración, logback imprimirá automáticamente los datos de estado en la consola.
Una vez que lo hagas bien, ya no habrá contaminación en las primeras líneas de tu registro.
A partir de marzo de 2015, en Logback 1.1.2 , necesita usar el subcomponente <encoder>
- <layout>
ahora está en desuso y, si lo usa, aparecerán mensajes de error. No puedes controlar esto, es el comportamiento predeterminado de Logback .
Algunas clases internas también se han renombrado, 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 completamente en mi proyecto. http://logback.qos.ch/codes.html#layoutInsteadOfEncoder
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>testFile.log</file>
...
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%msg%n</pattern>
</encoder>
</appender>