記錄與除錯

在 Java 中可以使用一些記錄框架。記錄比使用 System.out.println() 印出到標準輸出(stdout)或標準錯誤輸出(stderr)更好,有幾個理由:

  • 記錄訊息以來源名稱作為標籤,使得更容易找出記錄訊息來自何處。
  • 記錄訊息擁有一個能夠被簡單過濾的嚴重性等級(例如停用所有非嚴重警告)
  • 記錄器框架允許您啟用或停用某些來源的消息

Sponge 此用 org.slf4j.Logger,而非 java.util.logging.Logger

取得一個記錄器(Logger)

在插件初始化期間使用的 Guice 模組擁有插件作用域(plugin-scoped)的記錄器,這允許你使用 @Inject annotate 一個欄位、方法或建構子以取得你的插件的記錄器,而此記錄器已經被使用正確地插件 ID 預先設定了。

備註

參閱 主要的插件 Class 以取得關於設定你的插件 ID 的資訊。

範例 - Field

import com.google.inject.Inject;
import org.slf4j.Logger;

@Inject
private Logger logger;

範例 - Method

private Logger logger;

@Inject
private void setLogger(Logger logger) {
    this.logger = logger;
}

範例 - Constructor

// For the purpose of this example, "Banana" is the class name

private Logger logger;

@Inject
public Banana(Logger logger) {
    this.logger = logger;
}

建議你在你的插件的主要類別中設置 Logger。當插件被載入時,Guice 注入器會將其實例化。

儘管是可以的,在同一類別為你的 Logger 建立一個 Getter 方法也很理想。以下是一個 Getter 方法的範例。

public Logger getLogger() {
    return logger;
}

發送訊息

使用你的 Logger 發送訊息十分簡單。

備註

以下範例假設你的 Logger 的 Getter 方法名為 getLogger(),也就是前一章節所述。這可能會取決於你的 Getter 方法而有所不同。

getLogger().info(String);
getLogger().debug(String);
getLogger().warn(String);
getLogger().error(String);

這裡的 String 是你想要發送的訊息,例如:

getLogger().warn("This is a warning!");