Execute logback na depuração
Pergunta
Recentemente, mudei de Log4J para Logback e estou me perguntando se existe uma maneira fácil de executar o logback no modo de depuração, semelhante ao Log4J's log4j.debug
propriedade. Eu preciso ver onde está pegando meu logback.xml
a partir de.
Os documentos mencionam usando um StatusPrinter
Para imprimir o status interno do Logback, mas isso exigiria alterações de código.
Solução
EDITAR
Isso foi corrigido no logback 1.0.4. Agora você pode usar -Dlogback.debug=true
Para ativar a depuração da configuração de logback.
-Resposta antiga-
Infelizmente, não há como ativar a depuração por meio de uma propriedade do sistema. Você tem que usar <configuration debug="true">
no logback.xml
. Envie uma solicitação de recurso.
Outras dicas
É assim que eu faço isso. Defino uma propriedade do sistema chamada 'log.level', depois a referência no logback.xml.
Editar: A desvantagem é que você deve ter 'Log.level' sempre definido. A maneira como lido com isso é verificar meu método principal e defini -lo como informações, se ainda não estiver definido, faça isso antes de fazer as chamadas de registro. Em seguida, posso substituir a linha de comando e ter um padrão sensato.
Aqui está como fica no meu logback.xml:
<configuration>
<logger name="com.mycompany.project" level="${log.level}" />
<logger name="httpclient" level="WARN" />
<logger name="org.apache" level="WARN" />
<logger name="org.hibernate" level="WARN" />
<logger name="org.hibernate.cfg.AnnotationBinder" level="WARN" />
<logger name="org.hibernate.cfg.annotations" level="WARN" />
<logger name="org.quartz" level="WARN" />
<logger name="org.springframework" level="WARN" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-16thread] %-5level %-35.35logger{30} - %msg%n</pattern>
</encoder>
</appender>
<root level="${log.level:-INFO}">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Não pude fazer funcionar usando a resposta escolhida. No entanto, o seguinte funcionou:
java -Dlogback.configurationFile=/path/to/config-debug.xml com.domain.Main
Basta adicionar um arquivo (config-debug.xml
Neste exemplo) em algum lugar do seu servidor e deixe -o lá quando você precisar depurar. Como o seguinte.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{dd-MMM-yyyy HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Execute seu aplicativo usando o mencionado acima -D
parâmetro.
Quando as coisas voltarem ao normal, remova o -D
parâmetro e reinicie seu aplicativo.
Você pode definir a classe de ouvinte de status via propriedade do sistema:
java -Dlogback.statusListenerClass=ch.qos.logback.core.status.OnConsoleStatusListener ...
Ver: Manual de logback
No Eclipse, você pode ter várias configurações de execução. Abra sua classe principal. Vá para a depuração suspensa na barra de ferramentas Eclipse e selecione configurações de depuração. Clique no novo ícone de configuração de lançamento no canto superior esquerdo. Dê à sua configuração de lançamento um nome melhor. Clique na guia Argumentos sob o nome e digite -dlog.level = depuração ou o que você quiser. Clique em Fechar ou depurar
Você pode fazer isso novamente e especificar -dlog.level = aviso, por exemplo.