¿Cómo puedo configurar Logback para registrar diferentes niveles para un registrador en diferentes destinos?
Por ejemplo, dada la siguiente configuración de Logback, ¿Logback grabará INFO
mensajes STDOUT
y ERROR
mensajes en STDERR
?
(Tenga en cuenta que este ejemplo es una variación del ejemplo que se logback-examples/src/main/java/chapters/configuration/sample4.xml
muestra en el Capítulo 3: Configuración de inicio de sesión ).
<configuration>
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<appender name="STDERR"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
<target>System.err</target>
</appender>
<!-- What is the effective level of "chapters.configuration"? -->
<logger name="chapters.configuration" level="INFO" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<logger name="chapters.configuration" level="ERROR" additivity="false">
<appender-ref ref="STDERR" />
</logger>
<!-- turn OFF all logging (children can override) -->
<root level="OFF">
<appender-ref ref="STDOUT" />
</root>
</configuration>
levels are ordered as follows: TRACE < DEBUG < INFO < WARN < ERROR.
Respuestas:
Actualización: para un enfoque basado en la configuración utilizando Groovy, consulte la respuesta de Dean Hiller .
-
Puedes hacer algunas cosas interesantes con los filtros Logback . La siguiente configuración solo imprimirá mensajes de advertencia y error en stderr, y todo lo demás en stdout.
logback.xml
com.foo.StdOutFilter
com.foo.ErrOutFilter
fuente
Creo que esta sería la solución más simple:
fuente
ThresholdFilter
s en su lugar.<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
¿cuál es el rol real de especificar<root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="STDERR" /> </root>
en logback.xml?<onMatch>
y<onMismatch>
no están definidos paraThresholdFilter
. Simplemente quítelos y funcionará según lo previsto.Solución basada solo en la configuración , con ThresoldFilter y LevelFilters para mantener las cosas realmente simples de entender :
fuente
ThresoldFilter
.ThresoldFilter
STDOUT, en lugar de usar cincoLevelFilter
?Bien, esta es mi forma xml favorita de hacerlo. Hago esto para la versión eclipse para poder
y por alguna razón SO no muestra todo esto correctamente, pero la mayoría parece estar allí ...
fuente
logback.groovy
versión de esta línea de look?La solución más simple es usar
ThresholdFilter
en los apéndices:Ejemplo completo:
Actualización: como señaló Mike en el comentario, los mensajes con nivel de ERROR se imprimen aquí tanto en STDOUT como en STDERR. Sin embargo, no estoy seguro de cuál era la intención del OP. Puedes probar la respuesta de Mike si esto no es lo que querías.
fuente
Esta es la configuración que uso, que funciona bien, se basa en XML + JaninoEventEvaluator (requiere que la biblioteca Janino se agregue a Classpath)
fuente
Utilizo logback.groovy para configurar mi logback, pero también puedes hacerlo con la configuración xml:
Creo que usar GEventEvaluator es más simple porque no hay necesidad de crear clases de filtro.
¡Me disculpo por mi Inglés!
fuente
Prueba esto. Simplemente puede usar incorporado
ThresholdFilter
yLevelFilter
. No es necesario crear sus propios filtros programáticamente. En este ejemplo, los niveles de ADVERTENCIA y ERROR se registran en System.err y el resto en System.out:fuente
No tomo crédito por esta respuesta, ya que es simplemente una combinación de las dos mejores respuestas anteriores: la de X. Wo Satuk y la de Sébastien Helbert:
ThresholdFilter
es encantadora, pero no se puede configurar para que tenga un nivel superior y un nivel inferior *, pero combinándolo con dosLevelFilters
establecidos en "DENY"WARN
yERROR
funciona como un regalo.Muy importante : no olvides la
<target>System.err</target>
etiqueta en el apéndice STDERR: mi omisión me hizo sentir frustrado durante unos minutos.* Sin embargo, tiene un método
decide
en la API, pero no tengo ni idea de cómo lo usaría en este contexto.fuente
No se necesita programación. configuración hace tu vida más fácil.
A continuación se muestra la configuración que registra diferentes niveles de registros en diferentes archivos
fuente
fuente
Ejemplo de cómo enviar mensajes de color de nivel "INFO" o superior a la consola y mensajes de nivel "WARN" o superior a archivo .
Su archivo logback.xml :
fuente