Como posso configurar o Logback para registrar níveis diferentes para um criador de logs em destinos diferentes?
Por exemplo, dada a seguinte configuração do Logback, o Logback registrará INFO
mensagens STDOUT
e ERROR
mensagens para STDERR
?
(Observe que este exemplo é uma variação do exemplo logback-examples/src/main/java/chapters/configuration/sample4.xml
mostrado no Capítulo 3: Configuração de Logback ).
<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.
Respostas:
Atualização: Para uma abordagem baseada em todas as configurações usando o Groovy, consulte a resposta de Dean Hiller .
-
Você pode fazer algumas coisas interessantes com os filtros do Logback . A configuração abaixo imprimirá apenas mensagens de aviso e erro no stderr e todo o resto no stdout.
logback.xml
com.foo.StdOutFilter
com.foo.ErrOutFilter
fonte
Acredito que essa seria a solução mais simples:
fonte
ThresholdFilter
s.<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
qual é o papel real de especificar<root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="STDERR" /> </root>
no logback.xml?<onMatch>
e<onMismatch>
não estão definidos paraThresholdFilter
. Simplesmente remova-os e funcionará como pretendido.Solução baseada apenas na configuração , com um ThresoldFilter e LevelFilters para manter as coisas realmente simples de entender :
fonte
ThresoldFilter
.ThresoldFilter
STDOUT, em vez de usar cincoLevelFilter
?ok, aqui está minha maneira xml favorita de fazê-lo. Eu faço isso para a versão eclipse para que eu possa
e por alguma razão, SO não está mostrando tudo isso corretamente, mas a maioria parece estar lá ...
fonte
logback.groovy
versão dessa linha de visual?A solução mais simples é usar
ThresholdFilter
nos anexos:Exemplo completo:
Atualização: Como Mike apontou no comentário, as mensagens com nível de ERRO são impressas aqui, tanto para STDOUT quanto para STDERR. Mas não tenho certeza qual era a intenção do OP. Você pode tentar a resposta de Mike, se não é o que você queria.
fonte
Essa é a configuração que eu uso, que funciona bem, é baseada em XML + JaninoEventEvaluator (requer que a biblioteca Janino seja adicionada ao Classpath)
fonte
Eu uso logback.groovy para configurar meu logback, mas você também pode fazê-lo com a configuração xml:
Eu acho que usar o GEventEvaluator é mais simples, porque não há necessidade de criar classes de filtro.
Peço desculpas pelo meu inglês!
fonte
Tente isso. Você pode apenas usar built-in
ThresholdFilter
eLevelFilter
. Não há necessidade de criar seus próprios filtros programaticamente. Neste exemplo, os níveis WARN e ERROR são registrados no System.err e repousados no System.out:fonte
Não aceito nenhum crédito por esta resposta, pois é apenas uma combinação das duas melhores respostas acima: a do X. Wo Satuk e a de Sébastien Helbert:
ThresholdFilter
é adorável, mas você não pode configurá-lo para ter um nível superior e um nível superior. nível mais baixo *, mas combinando-o com os doisLevelFilters
definidos como "DENY"WARN
eERROR
funciona.Muito importante : não se esqueça da
<target>System.err</target>
etiqueta no aplicativo STDERR: minha omissão me frustrou por alguns minutos.* no entanto, ele possui um método
decide
na API, mas não tenho idéia de como você o utilizaria nesse contexto.fonte
Não é necessária programação. A configuração facilita sua vida.
Abaixo está a configuração que registra diferentes níveis de registros em arquivos diferentes
fonte
fonte
Exemplo de como gerar mensagens coloridas de nível "INFO" ou superior no console e mensagens de nível "WARN" ou superior no arquivo .
Seu arquivo logback.xml :
fonte