Warum "WARN" beim Start des Servers nicht definiert wurde?

8

Wenn ich liquibase in JBoss ausführe, erhalte ich die folgende WARN, aber alles wird korrekt aktualisiert:

%Vor%

Jeder Stacktrace beim Start des Servers wird als Fehler betrachtet, obwohl er als WARN, INFO oder NOTHING markiert ist.

Warum passiert das?
Was kann ich tun, um dieses Stacktrace vom Serverstart zu entfernen?

    
Fagner Brack 23.10.2014, 14:39
quelle

2 Antworten

10

Liquibase scannt Ihren Klassenpfad intern mit Ihrem Klassenlader, um nach Klassen zu suchen, bei denen es sich möglicherweise um Liquibase-Erweiterungen handelt. Ein Teil dieses Scans trifft einige Klassen, die mit dem liquibase jar gebündelt sind, aber nicht Teil des normalen Prozesses liquibase update sind.

Insbesondere überprüft der Code den Datenbank- und liquibase-Status, der bei Demos und der Fehlerbehebung hilfreich sein kann, und anderer Code, der zum Testen von Erweiterungen verwendet werden kann.

Diese nicht standardmäßigen Verwendungsklassen verweisen auf zusätzliche Abhängigkeiten wie Jetty und Junit und sind normalerweise in Produktionsumgebungen nicht verfügbar. Liquibase erwartet daher einige ClassNotFoundExceptions und DEBUG-Level protokolliert sie, bewegt sich und aktualisiert korrekt, wie Sie sehen.

In Ihrem Fall scheint es, dass der JBoss Classloader über eine zusätzliche Funktion verfügt, um auf WARN-Ebene alle ClassNotFoundExceptions zu protokollieren, die die Kette bis zu dem Punkt hochwerfen, an dem sie von Liquibase ignoriert wird.

Eine zukünftige Version von Liquibase wird sich besser zwischen der Codebasis "tools" und der Codebase "standard" aufteilen, aber für den Augenblick wären Ihre Optionen:

  • Fügen Sie die fehlenden Abhängigkeiten in Ihren Klassenpfad ein (jetty und junit in Ihrem Stacktrace)
  • Erstellen Sie genügend Stub-Klassen, die denselben Namen haben wie die referenzierten Jetty- und Junit-Klassen, um den Klassenlader glücklich zu machen.
  • Setzen Sie die Protokollierungsstufe für "org.jboss.modules" auf ERROR, um Protokolle der WARN-Ebene nicht zu protokollieren
Nathan Voxland 28.10.2014, 20:49
quelle
5

Ich habe diese Klasse benutzt, die sehr wahrscheinlich nicht funktioniert, aber auf allen anderen Servern (Tomcat, jboss / wildfly, weblogic, websphere, glassfish, Tomee, ...) Ich habe es auf Tomcat und Wildfly getestet.

%Vor%

Das ist nicht nett, aber es funktioniert.

Bearbeiten1:

Der Classloader sucht nach der Klasse org.eclipse.jetty.server.handler.AbstractHandler Da wir nicht auf dem Jetty sind, kann die Klasse vom Classloader nicht gefunden werden.

Eine Option wäre, die Jetty-JAR-Datei in den Tomcat oder die Wildfly einzufügen, ABER dies wird sehr wahrscheinlich Probleme mit tomcat / wildfly verursachen, da sie auch erwartete Interfaces und Klassen implementieren, Jetty und Wildfly / Tomcat zur Verfügung stellen. Um dies zu vermeiden - bis es von Liquibase behoben wird - müssen Sie dem Classloader eine Dummy-Implementierung von AbstractHandler zur Verfügung stellen. Also ist der Classloader glücklich und findet den AbstractHandler und die WARN Nachricht ist weg.

Wie gesagt, das ist nicht nett, aber es ist ein Workaround, um die ungeraden Nachrichten in der Logdatei und der Konsole loszuwerden. Wenn wir Glück haben, kann liquibase eine Korrektur für diesen kleinen Fehler in 3.4 oder vielleicht in 4.0 einbauen.

    
cilap 29.04.2015 11:12
quelle

Tags und Links