Registro y Depuración

Hay algunos frameworks de registro disponibles para usar en Java. El registro es preferible a la impresión en stdout o stderr con ``System.out.println() `` por varias razones:

  • Los mensajes registrados están etiquetados con un nombre de origen, por lo que es más fácil averiguar de dónde provienen los mensajes registrados.
  • Los mensajes logueados pueden ser filtrados según su nivel de importancia (por ejemplo, desactivar todas las notificaciones no críticas).
  • Los marcos registrados disponibles le permiten activar o desactivar los mensajes de ciertas fuentes.

Sponge usa org.slf4j.Logger, no java.util.logging.Logger.

Conseguir un Registro

El módulo Guice utilizado durante la inicialización de los complementos tiene un registrador con un complemento. Esto le permite anotar un campo, método o constructor con @Inject para obtener el registrador para su complemento, que está preconfigurado con el ID del complemento correcto.

Nota

Vea Clase de Plug-in Principal para información de cómo configurar el ID de tu plugin.

Ejemplo - Campo

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

@Inject
private Logger logger;

Ejemplo - Método

private Logger logger;

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

Ejemplo - Constructor

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

private Logger logger;

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

Es recomendable establecer su logger en su clase de plugin principal, ya que se instancia con el inyector de Guice cuando el plugin es cargado.

Creando un método getter para tu logger en la misma clase en la cual se estableció también ese ideal, aunque opcional. Un ejemplo de método getter es ilustrado a continuación.

public Logger getLogger() {
    return logger;
}

Emisión de mensajes

Emitir un mensaje con tu logger es muy simple.

Nota

El próximo ejemplo asume que el método getter para tu logger es llamado getLogger(), como se muestra en la sección anterior. Esto puede diferir para usted dependiendo en cual fue el nombre con el que llamó su método getter.

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

El String (cadena) es el mensaje que quieres emitir. Por ejemplo:

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

Manipulating the Logging

Nota

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.

    Advertencia

    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.