Spring-Boot Logging-Konfiguration bei der Bereitstellung als .war

8

Ich habe eine einfache Spring-Boot-Anwendung, die als WAR-Datei gepackt wird, die in einem externen Tomcat-Container bereitgestellt werden kann. Ich habe eine logback.xml (unten) im Classpath (/ WEB-INF / classes), aber bei der Bereitstellung in Tomcat wird das Protokoll nicht in die Datei geschrieben.

%Vor%     
elpisu 25.08.2014, 17:18
quelle

1 Antwort

21

Ich habe mit dem gleichen Problem gekämpft - die Protokollierung funktioniert gut mit Komponententests und dem Ausführen der Methode 'main ()', aber in tomcat ignoriert sie meine Konfiguration vollständig.

Es stellt sich heraus, dass tomcat beim Start eine Umgebungsvariable "LOGGING_CONFIG" setzt, um den Speicherort seiner Datei "logging.properties" zu beschreiben. Dies kann in tomcat / bin / catalina.sh oder (.bat) gesehen werden.

Spring Boot liest auch die Umgebung beim Start, und als Teil seiner intelligenten Handhabung der Konfiguration, ich glaube, es wandelt LOGGING_CONFIG in "Logging.config", eine Eigenschaft es verwendet, um es Ihnen zu ermöglichen, den Standort seiner zu überschreiben ' Protokollierungskonfiguration.

Das Problem ist, dass es versucht, diesen Wert als einen Dateinamen zu behandeln und ihn zu laden (es ist eigentlich kein Dateiname, sondern eine Java-Systemeigenschaft, die eine Datei beschreibt), aber es schlägt fehl und initialisiert seine Protokollierung nicht richtig und fährt mit allem Tomcat Setup standardmäßig fort.

Die Lösung scheint zu sein, sicherzustellen, dass die Umgebungsvariable zuerst gesetzt wird, zum Beispiel etwas (Ihre IDE sollte eine Option dafür haben - in Intelli gehen Sie auf Ausführen - & gt; Konfigurationen bearbeiten - & gt; Umgebungsvariablen - & gt; Geben Sie den Namen und den Wert aus dem Folgenden ein:

%Vor%

Spring Boot wird dies gegenüber LOGGING_CONFIG von Tomcat verwenden und wird wie erwartet funktionieren.

Bisher konnte ich dies jedoch nicht aus einer Konfigurationsdatei wie application.properties herausholen. Dies bedeutet, dass dies eine globale Einstellung für alle Anwendungen ist, die für diese Tomcat-Instanz bereitgestellt werden.

BEARBEITEN: Dies liegt daran, dass Umgebungsvariablen die lokale Konfiguration sowieso überschreiben, was in jedem anderen Fall aber das ist, was Sie wollten: - (

EDIT 2: Ich kann bestätigen, dass ab Spring Boot 1.1.6 dieses Problem behoben wurde - es wird als Warnung protokolliert und es wird weiterhin die vorhandene (und korrekte) Protokollierungskonfiguration verwenden. Leider können Sie die Warnmeldung selbst in Ihrer logback.xml-Datei nicht deaktivieren.

    
Patrick Herrera 27.08.2014 13:25
quelle

Tags und Links