2015-08-25 7 views
6

Ich möchte die Protokollstufe einer Spring Boot-Anwendung ändern, die ausgeführt wird.Spring Boot-Anwendung Log-Level

Kann die Protokollierungsstufe zur Laufzeit geändert werden? Im Moment habe ich die Logger-Konfiguration in meinem Glas selbst.

+1

Überprüfen Sie die Antwort auf diese Frage hier ansehen: http: //stackoverflow.com/questions/5448673/slf4j-logback-how-to-configure-loggers-in-runtime – style

Antwort

13

Das Ändern der Protokollebene während der Ausführung der Anwendung ist Teil der zugrunde liegenden Protokollimplementierung.

Sie haben die Logger-Implementierung, die Sie verwenden, nicht angegeben, daher nehme ich an, dass Sie das Standard-Logback verwenden, das über die Spring-Start-Starter-Logging- oder Spring-Boot-Starter-Web-Abhängigkeiten bereitgestellt wird.

Kommentieren Sie alle loggerbezogenen Konfigurationen aus application.properties , z.

#logging.path=logs 
#logging.level.org.springframework.web= INFO 
#logging.level.=INFO 

logback.xml in der Wurzel Ihrer Classpath hinzufügen mit dem Tag http://logback.qos.ch/manual/jmxConfig.html

Starten Sie die Anwendung und öffnen JConsole See und auf MBeans Tab gehen. Wählen Sie das Paket ch.qos.logback.classic.JMxConfigurator.Unter Standard suchen Sie die setLoggerLevel-Operation z. org.springframework.web, DEBUG

enter image description here

Die Änderung wird sofort wirksam. Weitere Logger-Bibliotheken finden Sie im Spring-Boot-Benutzerhandbuch http://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html Und bibliothekspezifische Informationen, z. für log4j http://www.sureshpw.com/2012/04/dynamic-logging-with-log4j.html

Ein anderer Ansatz ist die über Schritte ohne JMX und verwenden Konfiguration zu wiederholen Watcher

+0

Danke für die ausführliche Erklärung. Ich benutze Logback, damit ich die Ansätze verfolgen kann, die Sie oben beschrieben haben –

+0

diese Antwort und http://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html hat mir sehr geholfen. Eine andere Option, die ich mir vorstellen kann, ist autowiring 'org.springframework.boot.logging.logback.LogbackLoggingSystem' und' LogbackLoggingSystem.setLogLevel (String loggerName, LogLevel level) 'zu verwenden, um die Logging-Ebene zur Laufzeit programmgesteuert zu ändern. Auf diese Weise können Sie Ihre eigene Ruhe-API erstellen und steuern, wie Sie wollen (stellen Sie nur sicher, dass Sie den Endpunkt auf die richtige Weise sichern) – burcakulug

+0

@ Prabhakar D - Akzeptieren Sie dies als die Antwort und nicht den anderen Link nur beantworten. – Mubin

3

Wenn Sie möchten, die sich ändern Logging-Level einer bereits laufenden Spring-Boot-Anwendung können Sie Spring-Cloud-Config betrachten. Siehe: http://cloud.spring.io/spring-cloud-config/:

Frühling Cloud-Config bietet Server- und Client-seitige Unterstützung für externalisiert Konfiguration in einem verteilten System. Mit dem Konfigurationsserver können Sie externe Eigenschaften für Anwendungen in allen Umgebungen zentral verwalten.

Sie können zentral die Eigenschaften in dem Konfigurationsserver und in der aktuellen Anwendung verwalten - applications.properties Datei (bootstrap.properties überprüfen) für einen Eintrag erstellen

spring.application.name=application name 

Mit @RefreshScope Anmerkung in der Client-Anwendung, die Sie kann die Anwendungslaufzeit aktualisieren und die aktualisierte Protokollierungsebene anzeigen.

2

Mit der Veröffentlichung von Spring Boot 1.5 können Sie, wenn Sie einen Aktuator in Ihrer Boot-Anwendung haben, dies über eine Standard-REST-API tun.

1.5 Aktuator bietet einen Endpunkt namens "Logger", den Sie abrufen können, um die Konfiguration anzuzeigen, und POST, um Laufzeitänderungen vorzunehmen.

Ex.

curl -i -X POST -H 'Content-Type: application/json' -d '{"configuredLevel": "DEBUG"}' http://localhost:8080/loggers/org.springframwork 
Verwandte Themen