Loggen und Debugging
Es sind einige Protokollierungsframeworks für Java verfügbar. Das Protokollieren (loggen) ist der Ausgabe von Meldungen und Fehlern durch stdout und stderr durch System.out.println()
aus mehreren Gründen vorzuziehen:
Protokollierte Nachrichten sind mit einem Quellnamen versehen um die Zuordnung zu erleichtern.
Protokollierte Nachrichten haben einen Relevanz Index, nach dem einfach gefiltert werden kann (z.B. alle unkritischen Nachrichten abschalten)
Die verfügbaren Protokollierungsframeworks erlauben es dir Nachrichten von den gewünschten Quellen aus- oder einzublenden.
Sponge uses org.apache.logging.log4j.Logger
, not java.util.logging.Logger
.
Protokollieren eines Plugins
Das Guice Modul nutzt während der Initialisierung der Plugins einen speziellen auf die Plugins ausgerichteten Logger. Dies ermöglicht es eine Anmerkung (@Inject
) an ein Feld (englisch field), eine Methode oder einen Constructor anzuhängen um einen Logger, der mit der korrekten Plugin ID vorkonfiguriert ist, zu erhalten.
Bemerkung
Unter Hauptklasse des Plugins sind Informationen verfügbar, wie die Plugin-ID geändert werden kann.
Beispiel - Feld
import com.google.inject.Inject;
import org.apache.logging.log4j.Logger;
@Inject
private Logger logger;
Beispiel - Methode
private Logger logger;
@Inject
private void setLogger(Logger logger) {
this.logger = logger;
}
Beispiel - Konstruktor
// For the purpose of this example, "Banana" is the class name
private final Logger logger;
@Inject
public Banana(Logger logger) {
this.logger = logger;
}
Es ist empfohlen die Protokollierung in der Main Klasse des Plugins festzulegen, weil so mit dem Guice Injector ein entsprechendes Objekt beim Laden des Plugins erstellt wird.
Einen Getter für den Logger in derselben Klasse, in der er gesetzt wurde zu erstellen ist ideal, allerdings optional. Ein Beispiel für so einen Getter ist nachfolgend dargestellt.
public Logger getLogger() {
return logger;
}
Nachrichten ausgeben
Es ist sehr einfach eine Nachricht durch den Logger auszugeben.
Bemerkung
Das folgende Beispiel nimmt an, dass der Getter für den Logger getLogger()
genannt wurde, wie es in dem vorherigem Abschnitt gezeigt wurde. Je nach Name des Getter muss das Beispiel abgeändert werden.
getLogger().info("String");
getLogger().debug("String");
getLogger().warn("String");
getLogger().error("String");
Der String ist die Nachricht, die ausgegeben werden soll. Zum Beispiel:
getLogger().warn("This is a warning!");