Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Dominando el Logging en Java: Fundamentos y mejores prácticas

Fundamentos de Logging en Java

En este tutorial, aprenderemos sobre Java Logging y sus diversos componentes con la ayuda de ejemplos.

Java nos permite crear y capturar mensajes de log y archivos a través del proceso de logging.

En Java, el logging requiere frameworks y APIs. Java tiene un framework de logging integrado en el paquete java.util.logging.

También podemos usar frameworks de terceros como Log4j, Logback y muchos más para propósitos de logging.


Componentes de Java Logging

La figura a continuación representa los componentes principales y el flujo de control de la API de Java Logging (java.util.logging).

Dominando el Logging en Java: Fundamentos y mejores prácticas

1. Logger

La clase Logger proporciona métodos para logging. Podemos instanciar objetos de la clase Logger y llamar a sus métodos para propósitos de logging.

Tomemos un ejemplo.

Logger logger = Logger.getLogger("nuevoNombreLogger"); 

El método getLogger() de la clase Logger se usa para encontrar o crear un nuevo Logger. El argumento string define el nombre del logger.

Aquí, esto crea un nuevo objeto Logger o retorna un Logger existente con el mismo nombre.

Es convención definir un Logger después de la clase actual usando class.getName().

Logger logger = Logger.getLogger(MiClase.class.getName()); 
Nota: Este método lanzará NullPointerException si el nombre pasado es null.

Cada Logger tiene un nivel que determina la importancia del mensaje de log. Hay 7 niveles de log básicos:

Nivel de Log (en orden descendente)Uso
SEVEREfalla grave
WARNINGmensaje de advertencia, un problema potencial
INFOinformación general de runtime
CONFIGinformación de configuración
FINEinformación general de desarrollador (mensajes de traza)
FINERinformación detallada de desarrollador (mensajes de traza)
FINESTinformación altamente detallada de desarrollador (mensajes de traza)
OFFapagar logging para todos los niveles (no capturar nada)
ALLencender logging para todos los niveles (capturar todo)

Cada nivel de log tiene un valor entero que determina su severidad excepto dos niveles especiales OFF y ALL.


Registrando el mensaje

Por defecto, los tres niveles de log superiores siempre se registran. Para establecer un nivel diferente, podemos usar el siguiente código:

logger.setLevel(Level.NivelLog); // ejemplo logger.setLevel(Level.FINE); 

En este ejemplo, solo el nivel FINE y niveles superiores se establecen para ser registrados. Todos los demás mensajes de log son descartados.

Ahora para registrar un mensaje, usamos el método log().

logger.log(Level.NivelLog, "mensaje de log"); // ejemplo logger.log(Level.INFO, "Este es mensaje de nivel INFO"); 

Hay métodos abreviados para registrar en niveles deseados.

logger.info("Este es mensaje de nivel INFO"); logger.warning("Este es mensaje de nivel WARNING"); 

Todas las peticiones de log que han pasado el nivel de log establecido son luego reenviadas al LogRecord.

Nota: Si el nivel de un logger es null, su nivel se hereda de su padre y así sucesivamente arriba en el árbol.

2. Filtros (Filters)

Un filtro (si está presente) determina si el LogRecord debe ser reenviado o no. Como su nombre sugiere, filtra los mensajes de log según criterios específicos.

Un LogRecord solo se pasa del logger al log handler y del log handler a sistemas externos si pasa los criterios especificados.

// establecer un filtro logger.setFilter(filtro); // obtener un filtro Filter filtro = logger.getFilter(); 

3. Handlers (Appenders)

El log handler o appenders reciben el LogRecord y lo exportan a varios destinos.

Java SE proporciona 5 handlers integrados:

HandlersUso
StreamHandlerescribe a un OutputStream
ConsoleHandlerescribe a consola
FileHandlerescribe a archivo
SocketHandlerescribe a puertos TCP remotos
MemoryHandlerescribe a memoria

Un handler puede pasar el LogRecord a un filtro para determinar de nuevo si puede ser reenviado a sistemas externos o no.

Para agregar un nuevo handler, usamos el siguiente código:

logger.addHandler(handler); // ejemplo Handler handler = new ConsoleHandler(); logger.addHandler(handler); 

Para remover un handler, usamos el siguiente código:

logger.removeHandler(handler); // ejemplo Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler); 

Un logger puede tener múltiples handlers. Para obtener todos los handlers, usamos el siguiente código:

Handler[] handlers = logger.getHandlers(); 

4. Formatters

Un handler también puede usar un Formatter para formatear el objeto LogRecord en un string antes de exportarlo a sistemas externos.

Java SE tiene dos Formatters integrados:

FormattersUso
SimpleFormatterformatea LogRecord a string
XMLFormatterformatea LogRecord a forma XML

Podemos usar el siguiente código para formatear un handler:

// formatea a forma string handler.setFormatter(new SimpleFormatter()); // formatea a forma XML handler.setFormatter(new XMLFormatter()); 

LogManager

El objeto LogManager mantiene un registro de la información global de logging. Lee y mantiene la configuración de logging y las instancias de logger.

El log manager es un singleton, lo que significa que solo una instancia de él es instanciada.

Para obtener la instancia del log manager, usamos el siguiente código:

LogManager manager = LogManager.getLogManager(); 

Ventajas del Logging

Aquí algunas ventajas del logging en Java.

Java

  1. Dominando el Logging en Java: Mejores Prácticas Esenciales para Código Fiable
  2. Dominar Operadores en Java: Tipos, Sintaxis y Ejemplos Prácticos
  3. Comentarios en Java: Tipos, Uso y Mejores Prácticas
  4. Dominar el Bucle for Mejorado en Java: Sintaxis, Ejemplos y Mejores Prácticas
  5. Dominar Strings en Java: Creación, Métodos y Mejores Prácticas
  6. Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
  7. Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
  8. Dominando Try‑with‑Resources en Java: Gestión automática de recursos explicada
  9. Anotaciones en Java explicadas: Tipos, ubicación y ejemplos prácticos
  10. Aserciones en Java: Guía práctica para detectar bugs y asegurar fiabilidad del código
  11. Entendiendo Java Vector: Uso, Características y Comparación con ArrayList