Registrador en Java: ejemplo de registro en Java

Hoy veremos qué es Logger en Java. Java Logger permite realizar registros en la programación Java.

Registrador en Java

La API de registro de Java se introdujo en la versión 1.4 y se puede utilizar para registrar mensajes de aplicaciones. En este tutorial de registro de Java, aprenderemos las características básicas de Java Logger. También veremos ejemplos de Java Logger con diferentes niveles de registro, controladores de registro, formateadores, filtros, administrador de registro y configuraciones de registro.

Registrador de Java

java.util.logging.Loggeres la clase que se utiliza para registrar mensajes de la aplicación en la API de registro de Java. Podemos crear un registrador de Java con un código de una línea muy simple como:

Logger logger = Logger.getLogger(MyClass.class.getName());

Niveles de registro de Java

java.util.logging.LevelDefine los diferentes niveles de registro en Java. Hay siete niveles de registro en Java.

  1. GRAVE (más alta)
  2. ADVERTENCIA
  3. INFORMACIÓN
  4. CONFIGURAR
  5. BIEN
  6. MÁS FINO
  7. Lo mejor

Hay otros dos niveles de registro: OFF , que desactivará todos los registros, y ALL , que registrará todos los mensajes. Podemos configurar el nivel de registro con el siguiente código:

logger.setLevel(Level.FINE);

Los registros se generarán para todos los niveles iguales o superiores al nivel del registrador. Por ejemplo, si el nivel del registrador se establece en INFO, se generarán registros para los mensajes de registro INFO, WARNING y SEVERE.

Controladores de registro de Java

Podemos agregar varios controladores a un registrador de Java y, siempre que registremos un mensaje, cada controlador lo procesará en consecuencia. Hay dos controladores predeterminados proporcionados por la API de registro de Java.

  1. ConsoleHandler : este controlador escribe todos los mensajes de registro en la consola.
  2. FileHandler : este controlador escribe todos los mensajes de registro en un archivo en formato XML.

También podemos crear nuestros propios controladores personalizados para realizar tareas específicas. Para crear nuestra propia clase Handler, necesitamos extender la clase java.util.logging.Handler o cualquiera de sus subclases como StreamHandler, SocketHandler, etc. Aquí hay un ejemplo de un controlador de registro de Java personalizado:

package com.journaldev.log;import java.util.logging.LogRecord;import java.util.logging.StreamHandler;public class MyHandler extends StreamHandler {    @Override    public void publish(LogRecord record) {        //add own logic to publish        super.publish(record);    }    @Override    public void flush() {        super.flush();    }    @Override    public void close() throws SecurityException {        super.close();    }}

Formateadores de registro de Java

Los formateadores se utilizan para dar formato a los mensajes de registro. Hay dos formateadores disponibles en la API de registro de Java.

  1. SimpleFormatter : este formateador genera mensajes de texto con información básica. ConsoleHandler utiliza esta clase de formateador para imprimir mensajes de registro en la consola.
  2. XMLFormatter : este formateador genera un mensaje XML para el registro, FileHandler utiliza XMLFormatter como formateador predeterminado.

Podemos crear nuestra propia clase Formatter personalizada extendiendo java.util.logging.Formatterla clase y asociándola a cualquiera de los controladores. Aquí hay un ejemplo de una clase Formatter personalizada simple.

package com.journaldev.log;import java.util.Date;import java.util.logging.Formatter;import java.util.logging.LogRecord;public class MyFormatter extends Formatter {    @Override    public String format(LogRecord record) {        return record.getThreadID()+"::"+record.getSourceClassName()+"::"                +record.getSourceMethodName()+"::"                +new Date(record.getMillis())+"::"                +record.getMessage()+"n";    }}

Registrador en Java – Java Log Manager

java.util.logging.LogManagerEs la clase que lee la configuración de registro, crea y mantiene las instancias del registrador. Podemos usar esta clase para configurar nuestra propia configuración específica de la aplicación.

LogManager.getLogManager().readConfiguration(new FileInputStream("mylogging.properties"));

A continuación se muestra un ejemplo de archivo de configuración de la API de registro de Java. Si no especificamos ninguna configuración, se lee desde lib/logging.propertiesel archivo de inicio de JRE.mylogging.properties

handlers= java.util.logging.ConsoleHandler.level= FINE# default file output is in user's home directory.java.util.logging.FileHandler.pattern = %h/java%u.logjava.util.logging.FileHandler.limit = 50000java.util.logging.FileHandler.count = 1java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter# Limit the message that are printed on the console to INFO and above.java.util.logging.ConsoleHandler.level = INFOjava.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormattercom.journaldev.files = SEVERE

Aquí hay un programa Java simple que muestra el uso de Logger en Java.

package com.journaldev.log;import java.io.FileInputStream;import java.io.IOException;import java.util.logging.ConsoleHandler;import java.util.logging.FileHandler;import java.util.logging.Handler;import java.util.logging.Level;import java.util.logging.LogManager;import java.util.logging.Logger;public class LoggingExample {    static Logger logger = Logger.getLogger(LoggingExample.class.getName());        public static void main(String[] args) {        try {            LogManager.getLogManager().readConfiguration(new FileInputStream("mylogging.properties"));        } catch (SecurityException | IOException e1) {            e1.printStackTrace();        }        logger.setLevel(Level.FINE);        logger.addHandler(new ConsoleHandler());        //adding custom handler        logger.addHandler(new MyHandler());        try {            //FileHandler file name with max size and number of log files limit            Handler fileHandler = new FileHandler("/Users/pankaj/tmp/logger.log", 2000, 5);            fileHandler.setFormatter(new MyFormatter());            //setting custom filter for FileHandler            fileHandler.setFilter(new MyFilter());            logger.addHandler(fileHandler);                        for(int i=0; i1000; i++){                //logging messages                logger.log(Level.INFO, "Msg"+i);            }            logger.log(Level.CONFIG, "Config data");        } catch (SecurityException | IOException e) {            e.printStackTrace();        }    }}

Cuando ejecute el programa de ejemplo del registrador de Java anterior, notará que el registro CONFIG no se imprime en el archivo, esto se debe a la clase MyFilter.

package com.journaldev.log;import java.util.logging.Filter;import java.util.logging.Level;import java.util.logging.LogRecord;public class MyFilter implements Filter {@Overridepublic boolean isLoggable(LogRecord log) {//don't log CONFIG logs in fileif(log.getLevel() == Level.CONFIG) return false;return true;}}

Además, el formato de salida será el mismo que el definido por la clase MyFormatter.

1::com.journaldev.log.LoggingExample::main::Sat Dec 15 01:42:43 PST 2012::Msg9771::com.journaldev.log.LoggingExample::main::Sat Dec 15 01:42:43 PST 2012::Msg9781::com.journaldev.log.LoggingExample::main::Sat Dec 15 01:42:43 PST 2012::Msg9791::com.journaldev.log.LoggingExample::main::Sat Dec 15 01:42:43 PST 2012::Msg980

Si no agregamos nuestra propia clase Formatter a FileHandler, el mensaje de registro se imprimirá de esta manera.

record  date2012-12-14T17:03:13/date  millis1355533393319/millis  sequence996/sequence  loggercom.journaldev.log.LoggingExample/logger  levelINFO/level  classcom.journaldev.log.LoggingExample/class  methodmain/method  thread1/thread  messageMsg996/message/record

Los mensajes de registro de la consola tendrán el siguiente formato:

Dec 15, 2012 1:42:43 AM com.journaldev.log.LoggingExample mainINFO: Msg997Dec 15, 2012 1:42:43 AM com.journaldev.log.LoggingExample mainINFO: Msg998Dec 15, 2012 1:42:43 AM com.journaldev.log.LoggingExample mainINFO: Msg998

La imagen de abajo muestra el proyecto de ejemplo final de Java Logger. Eso es todo sobre Logger en Java y el ejemplo de Java Logger. Puedes descargar el proyecto desde el siguiente enlace.

Descargar proyecto de ejemplo de Java Logger

Referencia: API de registro de Java

SUSCRÍBETE A NUESTRO BOLETÍN 
No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio