日志记录和调试

在 Java 中可以使用一些日志记录器。日志记录要优于用 System.out.println() 往标准输入输出流中打印日志,因为:

  • 记录的日志会有一个源名称标签,由此能更容易找出日志的来源。

  • 记录的日志会有一个严重级别,由此能进行简单的筛选(例如关闭所有非关键性的通知)。

  • 日志记录器允许你开启或关闭来自特定源文件的日志。

Sponge 使用 org.slf4j.Logger,而不是 java.util.logging.Logger

获取 Logger

在插件初始化期间使用的 Guice 模块允许你使用 @Inject 注解字段、方法,或者构造方法以获取插件对应的 Logger,同时这一 Logger 已经被提前配置成了你的插件 ID。

注解

参见 插件的主类 以获取设置你的插件 ID 的更多信息。

示例——字段

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

@Inject
private Logger logger;

示例——方法

private Logger logger;

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

示例——构造方法作为示例,这里的类名是“Banana”

// 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 使用的是 getLogger() 方法,也就是前一部分的做法。这自然取决于你为你的 Getter 方法起了什么名字。

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

这里的 String 表示你想要记录的内容,例如:

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