So führen Sie eine neue Anwendung durch. Sie werden auf verschiedene Probleme stoßen. Gestern habe ich gerade gelöst, dass das Problem des Unterrichts beim Laden einer bestimmten Klasse nicht aus dem Klassenlader sichtbar ist. Heute habe ich auf das Problem gestoßen, die Protokolldatei nicht zu finden, die sich mit der Second-Party-Bibliothek zusammenzieht. Lassen Sie uns nacheinander darüber sprechen.
Legen Sie unter normalen Umständen die Konfigurationsdatei logback-r-pring.xml im Verzeichnis SRC/Main/Ressourcen (mit dem Logback-Protokollsystem) ab, wie in der folgenden Abbildung gezeigt
Setzen Sie Spring.Application.name = Spring-Boot-Demo-Application in application.Properties
Ein Zwei-Parteien-Paket enthält logback.xml darin
Gemäß der obigen Konfiguration hoffen wir nach dem Ausführen unter normalen Umständen, dass die log-Protokolldatei von Application.Home in der Verzeichnis von Benutzer.Home/Spring-Boot-Demo-Anwendung/Protokolls enthalten sein sollte, dies jedoch nicht. Sogar der Feder-Boot-Demo-Anwendungsordner wurde nicht generiert.
Schauen wir uns also an, wie das Protokollsystem die Protokollkonfigurationsdatei findet und analysiert. SpringBoot verwendet die LoggingApplicationListener -Klasse, um das Protokollsystem zu initialisieren. LoggingApplicationListener implementiert die ApplicationListener -Schnittstelle. Anschließend können wir sehen, was die OnapplicationEvent -Methode von LoggingApplicationListener durch das Timing -Diagramm tut:
Code (8) Ermitteln Sie die Standard -Protokollkonfigurationsdatei. Was ist der Standard? Schauen Sie sich dann den Code des Code (9) an:
Protected String [] getStandardConfigLocations () {return New String [] {"logback-test.groovy", "logback-test.xml", "logback.groovy", "logback.xml"}; }Wie "logback-test.groovy", "logback-test.xml", "logback.groovy", "logback.xml" diese sind Standard.
So finden Sie also, dass der Code (10) abhängt:
private String findConfig (String [] Standorte) {für (String -Ort: Standorte) {classpatResource ressource = new classpatResource (Ort, this.classloader); if (ressource.exists ()) {return "classPath:" + Ort; }} return null; }Es ist zu sehen, dass die Verwendung der CLASSPATHRESource -Klasse zur Suche nach der existierenden Methode der Classpathresource sehen:
public boolean existiert () {return (Resolveurl ()! = null); } geschützte URL Resolveurl () {if (this.clazz! = null) {return this.clazz.getResource (this.Path); } else if (this.classloader! } else {return classLoader.getSystemResource (this.Path); }}Es ist ersichtlich, dass dies.Classloader.getResource (this.Path); So finden Sie den Klassenloader als AppClassloader.
Wenn der Code (8) die Konfiguration nicht ermittelt, dann der Ausführungspunkt (12). Die Logik und der Code (8) sind ähnlich, der Dateiname ist jedoch unterschiedlich. Schauen wir uns an:
Protected String [] getSpringConfigLocations () {String [] popositions = getStandardConfigLocations (); für (int i = 0; i <popals.length; i ++) {String -Erweiterung = stringutils.getFileNameExtension (Positionen [i]); Standorte [i] = Standorte [i] .Substring (0, Positionen [i] .Length () - Erweiterung.Length () - 1) + "-spring." + Erweiterung; } Rückgabestellungen; }Es ist zu sehen, dass der Frühling auf dem Dateinamen von getStandardConfiglocations gespleißt ist und der gespleißte Dateiname lautet:
"" Logback-Test-spring.groovy "," logback-test-spring.xml "," logback-pring.groovy "," logback-spring.xml "
Zusammenfassend sucht Springboot zuerst nach der Standard -Protokollkonfigurationsdatei. Wenn Sie die Datei, die die Federkonfiguration spleißt, nicht finden können.
Oben sagten wir, dass ein JAR -Paket mit Logback.xml in die Anwendung eingeführt wurde und dieses JAR -Paket auch mit AppClassloader geladen wird. Bei der Ausführung von Schritt (8) wurde daher der Logback.xml im JAR-Paket gefunden, sodass wir den Schritt (12) nicht mehr ausführen, um unsere angepasste Logback-Spring.xml zu finden.
Lösung 1: Ändern Sie unsere Konfigurationsdatei in logback.xml, damit Sie in Schritt (8) zuerst nach logback.xml suchen, was gefunden werden sollte.
Lösung 2: Vermeiden Sie die Zwei-Parteien-Pakete mit Logback.xml. In diesem Fall wird es kein Problem geben, ob unsere eigene Konfiguration logback-pring.xml oder logback.xml ist.
In der täglichen Entwicklung sollte das Second-Party-Paket keine Protokollkonfigurationsdateien enthalten. Die in der Second-Porty-Bibliothek verwendeten Protokolle werden im Allgemeinen mit Code erstellt.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.