En este tutorial, aprenderemos sobre Java Logging y sus diversos componentes con la ayuda de ejemplos.
Java nos permite crear y capturar mensajes y archivos de registro a través del proceso de registro.
En Java, el registro requiere marcos y API. Java tiene un marco de registro incorporado en el java.util.logging
paquete.
También podemos utilizar marcos de terceros como Log4j, Logback y muchos más para fines de registro.
Componentes de registro de Java
La siguiente figura representa los componentes principales y el flujo de control de la API de registro de Java ( java.util.logging
).

1. Registrador
La Logger
clase proporciona métodos para el registro. Podemos instanciar objetos de la Logger
clase y llamar a sus métodos con fines de registro.
Pongamos un ejemplo.
Logger logger = Logger.getLogger("newLoggerName");
El getLogger()
método de la Logger
clase se utiliza para buscar o crear un nuevo Logger
. El argumento de cadena define el nombre del registrador.
Aquí, esto crea un nuevo Logger
objeto o devuelve uno existente Logger
con el mismo nombre.
Es una convención definir a Logger
después de la clase actual usando class.getName()
.
Logger logger = Logger.getLogger(MyClass.class.getName());
Nota: Este método arrojará NullPointerException
si el nombre pasado es null
.
Cada uno Logger
tiene un nivel que determina la importancia del mensaje de registro. Hay 7 niveles de registro básicos:
Nivel de registro (en orden descendente) | Utilizar |
---|---|
GRAVE | grave fracaso |
ADVERTENCIA | mensaje de advertencia, un problema potencial |
INFO | información general de tiempo de ejecución |
CONFIG | información de configuración |
MULTA | información general del desarrollador (mensajes de seguimiento) |
Más fino | información detallada del desarrollador (mensajes de seguimiento) |
MEJOR | información muy detallada del desarrollador (mensajes de seguimiento) |
APAGADO | desactivar el registro para todos los niveles (no capturar nada) |
TODOS | activar el registro para todos los niveles (capturar todo) |
Cada nivel de registro tiene un valor entero que determina su gravedad a excepción de dos niveles de registro especiales OFF
y ALL
.
Registrando el mensaje
De forma predeterminada, los tres niveles de registro superiores siempre se registran. Para establecer un nivel diferente, podemos usar el siguiente código:
logger.setLevel(Level.LogLevel); // example logger.setLevel(Level.FINE);
En este ejemplo, solo el nivel FINE
y los niveles superiores están configurados para registrarse. Todos los demás mensajes de registro se eliminan.
Ahora, para registrar un mensaje, usamos el log()
método.
logger.log(Level.LogLevel, "log message"); // example logger.log(Level.INFO, "This is INFO log level message");
Existen métodos abreviados para registrar en los niveles deseados.
logger.info( "This is INFO log level message"); logger.warning( "This is WARNING log level message");
Todas las solicitudes de registro que hayan pasado el nivel de registro establecido se reenvían al LogRecord .
Nota: Si el nivel de un registrador está configurado en null
, su nivel se hereda de su padre y así sucesivamente en el árbol.
2. Filtros
Un filtro (si está presente) determina si el LogRecord debe reenviarse o no. Como sugiere el nombre, filtra los mensajes de registro según criterios específicos.
Un LogRecord solo se pasa del registrador al controlador de registros y del controlador de registros a sistemas externos si pasa los criterios especificados.
// set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter();
3. Manipuladores (anexos)
El administrador de registros o los añadidos reciben el LogRecord y lo exportan a varios destinos.
Java SE proporciona 5 controladores integrados:
Manipuladores | Utilizar |
---|---|
StreamHandler | escribe a un OutputStream |
ConsoleHandler | escribe en la consola |
FileHandler | escribe en el archivo |
SocketHandler | escribe en puertos TCP remotos |
MemoryHandler | escribe en la memoria |
Un controlador puede pasar el LogRecord a un filtro para determinar nuevamente si se puede reenviar a sistemas externos o no.
Para agregar un nuevo controlador, usamos el siguiente código:
logger.addHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler);
Para eliminar un controlador, usamos el siguiente código:
logger.removeHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler);
Un registrador puede tener varios controladores. Para obtener todos los controladores, usamos el siguiente código:
Handler() handlers = logger.getHandlers();
4. Formateadores
Un controlador también puede usar un formateador para formatear el objeto LogRecord en una cadena antes de exportarlo a sistemas externos.
Java SE tiene dos formateadores integrados :
Formateadores | Utilizar |
---|---|
SimpleFormatter | formatos LogRecord de cadena |
XMLFormatter | formatos LogRecord de forma XML |
Podemos usar el siguiente código para formatear un controlador:
// formats to string form handler.setFormatter(new SimpleFormatter()); // formats to XML form handler.setFormatter(new XMLFormatter());
LogManager
El objeto LogManager realiza un seguimiento de la información de registro global. Lee y mantiene la configuración de registro y las instancias del registrador.
El administrador de registros es un singleton, lo que significa que solo se crea una instancia de él.
Para obtener la instancia del administrador de registros, usamos el siguiente código:
LogManager manager = new LogManager();
Ventajas de la tala
Estas son algunas de las ventajas de iniciar sesión en Java.
- ayuda a monitorear el flujo del programa
- ayuda a capturar cualquier error que pueda ocurrir
- proporciona soporte para el diagnóstico y la depuración de problemas