2010-09-27 4 views
26

Je suis récemment passé de log4j à logback et je me demande s'il existe un moyen facile d'exécuter le logback en mode debug, similaire à la propriété log4j.debug de log4j. J'ai besoin de voir d'où vient mon logback.xml.Exécution du logback dans le débogage

Les docs mentionnent l'utilisation d'un StatusPrinter pour imprimer l'état interne du journal, mais cela nécessiterait des modifications de code.

Répondre

34

[EDIT]

Cela a été corrigé dans Logback 1.0.4. Vous pouvez maintenant utiliser -Dlogback.debug=true pour activer le débogage de la configuration du journal.

- Vieille réponse -

Malheureusement, il n'y a aucun moyen pour activer le débogage via une propriété du système. Vous devez utiliser <configuration debug="true"> dans le logback.xml. Veuillez soumettre une demande de fonctionnalité.

+2

Il a été fait: http://jira.qos.ch/ browse/LBCLASSIC-225 Les plaidoyers votent pour cela! –

+4

La fonctionnalité est "fixe" et se trouve dans le journal 1.0.4. –

+0

Pour être absolument clair, vous pouvez maintenant activer le débogage de Logback avec une propriété système, par ex. '-Dlogback.debug = true'. Via http://gordondickens.com/wordpress/2013/07/18/logback-config-showing-debug-level/. –

3

Voici comment je le fais. Je définis une propriété système appelée 'log.level', puis je la référence dans le fichier logback.xml.

Editer: L'inconvénient est que vous devez avoir 'log.level' toujours défini. La façon dont je traite cela est de vérifier dans ma méthode principale et le mettre à INFO si ce n'est pas déjà fait, assurez-vous de le faire avant de vous connecter les premiers appels. Ensuite, je peux remplacer sur la ligne de commande, et avoir un défaut par défaut.

Voici à quoi il ressemble dans mon 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> 
+6

vous pouvez donner à la propriété une valeur par défaut sur votre fichier logback.xml au cas où il n'est pas défini, comme ceci: '' De cette façon, vous n'avez pas besoin de définir C'est la méthode principale si elle n'est pas définie. – Chirlo

+0

Merci j'ai raté ça. Maintenant vous le mentionnez je peux le voir dans les docs http://logback.qos.ch/manual/configuration.html#defaultValuesForVariables –

+0

Merci pour les deux commentaires. Dans Eclipse, je ne peux pas définir une variable d'environnement dans la configuration d'exécution pour désactiver la journalisation lors de l'exécution du site mvn, mais avoir un niveau de débogage par défaut lors de l'exécution de tests uniques dans Eclipse. Merci. –

-1

Dans Eclipse, vous pouvez avoir plusieurs configurations d'exécution. Ouvrez votre classe principale. Accédez à la liste déroulante Déboguer sur la barre d'outils Eclipse et sélectionnez Configurations de débogage. Cliquez sur l'icône Nouvelle configuration de lancement en haut à gauche. Donnez à votre configuration de lancement un meilleur nom. Cliquez sur l'onglet Arguments sous le nom et entrez -Dlog.level = debug ou tout ce que vous voulez. Cliquez sur Fermer ou Déboguer

Vous pouvez le faire à nouveau et spécifiez -Dlog.level = warn par exemple.

0

Je ne pouvais pas le faire fonctionner en utilisant la réponse choisie. Cependant, ce qui suit travaillé:

java -Dlogback.configurationFile=/path/to/config-debug.xml com.domain.Main 

il suffit d'ajouter un fichier (config-debug.xml dans cet exemple) quelque part sur votre serveur et laissez-le là quand vous avez besoin de débogage. Comme le suivant.

<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> 

Exécutez votre application en utilisant le paramètre -D mentionné précédemment. Lorsque les choses reviennent à la normale, supprimez le paramètre -D et redémarrez votre application.

Source: Chapter 3: Logback configuration

0

Vous pouvez définir la classe d'écouteur d'état via la propriété du système:

java -Dlogback.statusListenerClass=ch.qos.logback.core.status.OnConsoleStatusListener ... 

Voir: Logback manual

Questions connexes