Logging and Debugging

Det er noen få logging frameworks tilgjengelig for bruk i Java. Logging er foretrukket for å printe til stdout eller stderr med System.out.println() for en rekke årsaker:

  • Loggførte meldinger er merket med et kildenavn som gjør det enklere å finne ut hvor de loggførte meldingene kommer fra.

  • Loggførte meldinger har en alvorlighetsgrad som tillater enkel filtrering (f.eks.alle ukritiske merknader).

  • De tilgjengelige loggføringsrammeverkene lar deg aktivere eller deaktivere meldinger fra spesifikke kilder.

Sponge bruker org.slf4j.Logger, ikke java.util.logging.Logger.

Å få en loggfører

Guicemodulen brukt under initalisering av plugins har en pluginglobal logger. Dette tillater deg å kommentere et felt, metode eller en såkalt constructor med @Inject for å hente loggeren for din plugin, som er forhåndskonfigurert med korrekt plugin-ID.

Obs

See Main Plugin Class for information on configuring your plugin ID.

Eksempel - Felt/field

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

@Inject
private Logger logger;

Eksempel - Metode

private Logger logger;

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

Eksempel - Constructor

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

private Logger logger;

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

Det er anbefalt å sette din såkalte logger i hovedklassen i pluginen din, da det startes med Guice-injektoren når pluginen er lastet.

Det er ideelt å opprette en gettermetode for din logger i samme klasse som den ble satt, selv om det er valgfritt. Et eksempel på gettermetode er illustrert nedenfor.

public Logger getLogger() {
    return logger;
}

Å sende ut meldinger

Å sende ut en melding med din logger er veldig enkelt.

Obs

Følgende eksempler forutsetter at gettermetoden for loggeren din er kalt getLogger(), som vist i forrige seksjon. Dette kan variere for deg avhengig av hva du kalte gettermetoden din.

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

Strengen er meldingen du ønsker å sende. For eksempel:

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

Manipulating the Logging

Obs

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.

    Advarsel

    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.