Parece um erro de descuido, mas não consigo encontrar a causa. Log com logback / slf4j (versão mais recente slf4j-api-1.6.1, logback core / classic 0.9.24). A configuração de log mais simples para teste é:
<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>
Toda configuração de log começa com as linhas de status internas do 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 é, de acordo com os documentos, o formato que o logback usa por padrão. Em seguida, termina a leitura da configuração (configurada para gerar um formato diferente) e continua com a saída formatada corretamente. Há um parâmetro de configuração <configuration debug="false">
que não afeta isso.
Alguém sabe como desligar isso?
Respostas:
Se você definir o
debug
atributo doconfiguration
elemento comotrue
, receberá todas as informações de status no console. Se este for o seu problema, apenas defina-o como falso ou remova-o.Se você tiver algum problema de configuração de nível
WARN
ou superior, também receberá todas as informações de status registradas no console (incluindo mensagens de nívelINFO
). A melhor solução para esse problema é corrigi-lo (no seu caso, substitua o<layout>
elemento por um<encoder>
elemento).Se, por algum motivo, você não conseguir resolver o problema, mas quiser remover as informações de status do console, poderá configurar uma alternativa
StatusListener
. UseNopStatusListener
para remover completamente as informações de status:fonte
INFO
mensagens de log também desapareceriam, mas na verdade elas desaparecem. Eu sei que a resposta diz isso, mas por algum motivo não estava claro para mim. Para ser tão claro: corrija o problema do codificador / layout e as mensagens de aviso desaparecerão, mas as informações também desaparecerão, mesmo que não estejam relacionadas ao problema.Conforme descrito na documentação , se ocorrerem avisos ou erros durante a análise do arquivo de configuração, o logback imprimirá automaticamente os dados de status no console.
Siga http://logback.qos.ch/codes.html#layoutInsteadOfEncoder, ou seja, o link mencionado pelo logback em sua mensagem de aviso. Depois de seguir as etapas mencionadas, ou seja, se você substituir o elemento <layout> por <encoder>, o logback interromperá a impressão de mensagens no console.
fonte
debug="true"
atributo noconfiguration
elementologback.xml
. Mencione isso para o benefício de outras pessoas que caem nesse buraco!Ceki resposta está correta:
Depois de acertar, não haverá mais poluição nas primeiras linhas do seu registro.
Desde março de 2015, no Logback 1.1.2 , você precisa usar o
<encoder>
subcomponente -<layout>
agora está obsoleto e, se usá-lo, aparecerão mensagens de erro. Você não pode controlar isso, é o comportamento padrão do Logback .Algumas classes internas também foram renomeadas e até os exemplos em sua página de manual estão desatualizados!
Aqui está o trecho de código da página de Ajuda do Código de erros , que tem a maneira correta de configurar o criador de logs. Isso corrigiu o problema completamente no meu projeto. http://logback.qos.ch/codes.html#layoutInsteadOfEncoder
fonte
Percebi que Steve encontrou a correção, mas ele não a mencionou no tópico. Caso outra pessoa acerte o mesmo problema, aqui está a correção.
Substitua os elementos "<layout>" por "<encoder> .. </encoder>"
O culpado é: <layout class = "ch.qos.logback.classic.PatternLayout">
fonte
Lutei com o mesmo problema, ou seja, havia um monte de linhas registradas logo no início que não estavam relacionadas ao meu código. Aqui está como eu consertei.
Isso está sendo executado com a seguinte entrada no pom.xml
fonte
Isso parece ser corrigido em 0.9.29. Acabei de fazer vários testes. Não há mais informações do Joran. Eu acho que esse é o conserto de conserto.
fonte
Eu tive o mesmo problema eu adicionei esta linha
no logback e funcionou com sucesso
fonte
Eu tentei de tudo e nada funcionou para mim. Meu problema foi devido a vários arquivos logback.xml no meu caminho de classe. Este é o caso comum em projetos multi-modulares. Quando existe apenas um arquivo logback.xml no caminho de classe, não há ambiguidade e o problema é resolvido.
fonte
Usando o
logback.groovy
:statusListener(NopStatusListener)
(nosrc/test/resources/logback.groovy
) funciona.(Um caso de uso válido é, por exemplo, se estiver trabalhando com ANT no Eclipse, usando log de logback, classes groovy e testes de unidade em que os testes de unidade fazem o teste
src/test/resources/logback.groovy
, mas também verá osrc/main/resources/logback.groovy
(ou similar) que você não pode excluir (se o caminho de classe do ANT usar o caminho de classe dos projetos).)fonte
Prefiro usar o ouvinte de status para desativar os próprios logs de logback:
Mas, como foi mencionado, o NopStatusListener também impede a exibição de avisos e erros. Assim, você pode escrever seu ouvinte de status personalizado e alterar o nível do log manualmente:
Em seguida, use-o no seu arquivo logback.xml:
fonte