Ведение логов (журналов) и отладка

В Java доступно несколько библиотек для логирования. Логирование лучше записи в стандартный вывод или в стандартный поток ошибок с помощью System.out.println() по нескольким причинам:

  • Сообщения в логах имеют источник, поэтому легче определить, откуда они берутся.

  • У сообщений в логах есть уровень важности, что позволяет организовать простую фильтрацию (например, отключить все некритические сообщения).

  • Существующие библиотеки для логирования позволяют включать или отключать сообщения из конкретных источников.

Sponge uses org.apache.logging.log4j.Logger, not java.util.logging.Logger.

Получение логгера

Модуль Guice, используемый при инициализации плагинов, содержит логгер для каждого плагина. Благодаря этому можно указать аннотацию @Inject перед полем, методом или конструктором, чтобы получить логгер плагина, заранее сконфигурированный с правильным ID плагина.

Примечание

См. Основной класс плагина для получения информации о настройке ID вашего плагина.

Пример - поле

import com.google.inject.Inject;
import org.apache.logging.log4j.Logger;

@Inject
private Logger logger;

Пример - метод

private Logger logger;

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

Пример - конструктор

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

private final Logger logger;

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

Рекомендуется задать логгер в главном классе плагина, так как модуль Guice создаёт его экземпляр при загрузке плагина.

Также идеально, хотя не обязательно, создать метод чтения (геттер) для логгера в том же классе. Пример метода чтения показан ниже.

public Logger getLogger() {
    return logger;
}

Вывод сообщений

Выводить сообщения с помощью логгера очень просто.

Примечание

В следующем примере подразумевается, что метод получения логгера называется getLogger(), как показано в предыдущем разделе. Его можно назвать по-другому.

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

Строка - это сообщение, которое нужно вывести. Например:

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