Penebangan dan Debugging

Ada beberapa kerangka pendataan yang tersedia untuk digunakan pada Java. Pendataan lebih baik dicetak ke stdout atau stderr dengan System.out.println() untuk sejumlah alasan:

  • Log pesan label dengan nama sumber, sehingga lebih mudah untuk mencari tahu di mana log pesan-pesan yang datang dari.
  • Pesan tercatat memiliki tingkat keparahan yang memungkinkan untuk penyaringan sederhana (misalnya menonaktifkan semua non-kritis pemberitahuan).
  • Tersedia logger kerangka kerja yang memungkinkan anda untuk mengaktifkan atau menonaktifkan pesan dari sumber tertentu.

Sponge uses org.slf4j.Logger, not java.util.logging.Logger.

Mendapatkan Logger

Modul Guice yang digunakan selama inisialisasi plugin memiliki plugin-scoped logger. Ini memungkinkan anda untuk menganotasikan bidang, metode, atau konstruktor dengan @Inject untuk mendapatkan logger untuk plugin anda, yang sudah dikonfigurasi sebelumnya dengan ID plugin yang benar.

Catatan

Lihat Class Plugin utama untuk informasi dalam mengkonfigurasi ID plugin anda.

Example - Field

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

@Inject
private Logger logger;

Example - Method

private Logger logger;

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

Example - Constructor

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

private Logger logger;

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

Dianjurkan untuk mengatur logger di plugin utama kelas, seperti yang diturunkan dengan Guice injector ketika plugin ini dimuat.

Menciptakan metode pengambil untuk anda logger di kelas yang sama di mana itu ditetapkan juga ideal, meskipun opsional. Contoh pengambil metode ini diilustrasikan di bawah ini.

public Logger getLogger() {
    return logger;
}

Memancarkan Pesan

Memancarkan pesan dengan anda logger adalah sangat sederhana.

Catatan

Contoh berikut mengasumsikan bahwa metode pengambil untuk logger Anda dinamai `` getLogger () ``, seperti yang ditunjukkan pada bagian sebelumnya. Ini mungkin berbeda untuk Anda tergantung pada apa yang Anda namakan metode pengambil Anda.

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

String pesan yang ingin anda keluarkan. Misalnya:

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

Manipulating the Logging

Catatan

These techniques should only be used in very rare cases such as badly chosen logging defaults in libraries. Add a config option to disable those if you use them.

Some libraries use bad logging practices such as logging on too high a level. In these cases, you have three choices:

  1. Ask the author of that library to adjust their logging standards, as this fixes the problem at its source.

  2. Recommend your users to configure the logging using a log4j2.xml config file. Provide users with the recommended configuration additions.

  3. Configure the logging in your plugin yourself:

    ((org.apache.logging.log4j.core.Logger) LogManager.getLogger("FtpLoggingFilter")).setLevel(Level.WARN);
    

    This configures the log level of the FtpLoggingFilter logger to WARN. This will hide all messages that use a lower log level such as INFO and DEBUG.

    Peringatan

    This solution assumes that log4j2 is used as logging framework by the server, however that might not be the case for all/future implementations of the SpongeAPI.

If you have any questions regarding logging you can always ask us on IRC, Discord or the Forums.