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 benutzt org.slf4j.Logger und nicht 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.slf4j.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 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!");