web-dev-qa-db-fra.com

Exécutez Logback dans le débogage

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

Les documents mentionnent l'utilisation d'un StatusPrinter pour imprimer l'état interne de la déconnexion, mais cela nécessiterait des modifications de code.

36
dogbane

[MODIFIER]

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

- Ancienne réponse -

Malheureusement, il n'existe aucun moyen d'activer le débogage via une propriété System. Vous devez utiliser <configuration debug="true"> dans le logback.xml. Veuillez soumettre une demande de fonctionnalité.

59
Aaron Digulla

Voilà comment je le fais. J'ai défini une propriété système appelée 'log.level', puis je la référence dans logback.xml.

Éditer: L'inconvénient est que vous DEVEZ toujours avoir "log.level". La façon dont je gère cela consiste à vérifier ma méthode principale et à la définir sur INFO si elle n'est pas déjà définie, assurez-vous de le faire avant de connecter les appels pour la première fois. Ensuite, je peux remplacer la ligne de commande et avoir une valeur par défaut raisonnable.

Voici à quoi cela 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>
4
David Roussel

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

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

Voir: Manuel de déconnexion

1
deve

Je ne pouvais pas le faire fonctionner en utilisant la réponse choisie. Cependant, les éléments suivants ont fonctionné:

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

Ajoutez simplement un fichier (config-debug.xml Dans cet exemple) quelque part sur votre serveur et laissez-le là lorsque vous devez déboguer. 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é ci-dessus.

Lorsque les choses reviennent à la normale, supprimez le paramètre -D Et redémarrez votre application.

Source: Chapitre 3: Configuration de la déconnexion

1
Andres