2010-09-27 4 views
26

Ich habe vor kurzem von log4j auf Logback umgestellt und frage mich, ob es eine einfache Möglichkeit gibt, Logback im Debug-Modus auszuführen, ähnlich wie log4js log4j.debug Eigenschaft. Ich muss sehen, wo es meine abholt.Logback in Debug ausführen

Die Dokumentation erwähnt die Verwendung eines , um den internen Status des Logbacks auszudrucken, aber das würde Codeänderungen erfordern.

Antwort

34

[EDIT]

Das in Logback 1.0.4 behoben wurde. Sie können jetzt -Dlogback.debug=true verwenden, um das Debugging des Logback-Setups zu aktivieren.

- Alte Antwort -

Leider gibt es keine Möglichkeit, das Debugging über eine Systemeigenschaft zu ermöglichen. Sie müssen <configuration debug="true"> in der logback.xml verwenden. Bitte senden Sie eine Feature-Anfrage.

+2

Es ist geschehen: http://jira.qos.ch/ stöbern/LBCLASSIC-225 Bitte wählen Sie dafür! –

+4

Feature ist "fest" und ist in Logback 1.0.4. –

+0

Um absolut klar zu sein, können Sie jetzt Logback Debuggen mit einer Systemeigenschaft ermöglichen, beispielsweise '-Dlogback.debug = true'. Via http://gordondickens.com/wordpress/2013/07/18/logback-config-showing-debug-level/. –

3

So mache ich es. Ich habe eine Systemeigenschaft namens "log.level" festgelegt, dann referenziere ich sie in logback.xml.

Edit: Der Nachteil ist, dass Sie müssen immer "log.level" gesetzt haben. Die Art, wie ich damit umgehe, besteht darin, meine Hauptmethode einzuchecken und sie auf INFO zu setzen, wenn sie nicht bereits eingestellt ist, bevor Sie zuerst Anrufe protokollieren. Dann kann ich in der Befehlszeile überschreiben und habe einen vernünftigen Standard.

Hier ist, wie es in meinem logback.xml aussieht:

<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

können Sie die Eigenschaft einen Standardwert auf Ihrem logback.xml, falls es nicht geben definiert ist, wie folgt aus: '' Auf diese Weise brauchen Sie nicht zu setzen es auf der Hauptmethode, wenn nicht eingestellt. – Chirlo

+0

Danke, dass ich das verpasst habe. Jetzt nennen Sie es ich es in der Dokumentation sehen http://logback.qos.ch/manual/configuration.html#defaultValuesForVariables –

+0

Danke für beide Kommentare. In Eclipse kann ich nicht eine Umgebungsvariable in der Laufkonfiguration eingestellt Protokollierung auszuschalten, wenn mvn Website ausgeführt wird, aber ein Standardniveau Debug hat, wenn einzelne Tests in Eclipse ausgeführt wird. Vielen Dank. –

-1

in Eclipse mehrere Ausführungskonfigurationen haben können. Öffne deine Hauptklasse. Gehen Sie in der Eclipse-Symbolleiste zum Debug-Dropdown und wählen Sie Debug-Konfigurationen. Klicken Sie oben links auf das Symbol Neue Startkonfiguration. Geben Sie Ihrer Startkonfiguration einen besseren Namen. Klicken Sie auf die Registerkarte Argumente unter dem Namen und geben Sie -Dlog.level = debuggen oder was auch immer Sie wollen. Klicken Sie auf Schließen oder Debug

Sie können dies erneut tun und beispielsweise -Dlog.level = warn angeben.

0

Ich konnte es nicht mit der gewählten Antwort arbeiten lassen. Nachfolgend jedoch gearbeitet:

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

Fügen Sie einfach eine Datei (config-debug.xml in diesem Beispiel) irgendwo auf Ihrem Server und lassen Sie ihn dort, wenn Sie debuggen müssen. Wie das Folgende.

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

Führen Sie Ihre Anwendung mit dem oben genannten Parameter -D aus.

Wenn die Dinge wieder normal sind, entfernen Sie den Parameter -D und starten Sie Ihre Anwendung neu.

Quelle: Chapter 3: Logback configuration

0

Sie können den Status-Listener-Klasse über System Eigenschaft:

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

See: Logback manual