Un framework de registro de Java es un paquete de registro de datos informáticos para la plataforma Java . Este artículo trata sobre frameworks de registro de propósito general.
El registro de eventos se refiere a la grabación de la actividad de una aplicación y es un tema común para los equipos de desarrollo. Los frameworks de registro simplifican y estandarizan este proceso para la plataforma Java. En particular, ofrecen flexibilidad al evitar la salida explícita a la consola (véase Appender más abajo). El lugar donde se escriben los registros se vuelve independiente del código y se puede personalizar en tiempo de ejecución.
Lamentablemente, el JDK no incluía el registro de eventos en su versión original, por lo que, cuando se añadió la API de registro de Java, ya se utilizaban varios marcos de registro, en particular Apache Commons Logging (también conocido como Java Commons Logging o JCL) y Log4j . Esto generó problemas al integrar distintas bibliotecas de terceros (JAR), cada una con un marco de registro diferente. Para solucionar este problema, se desarrollaron marcos de registro conectables (envoltorios).
Descripción general de las funcionalidades
El registro de eventos generalmente se divide en tres partes principales: el registrador, el formateador y el agregador (o manejador).
- El registrador se encarga de capturar el mensaje que se va a registrar junto con ciertos metadatos y pasarlo al marco de registro.
- Tras recibir el mensaje, el sistema llama al formateador con dicho mensaje, el cual lo formatea para su salida.
- El sistema entrega entonces el mensaje formateado al Appender/Handler correspondiente para su procesamiento. Esto puede incluir mostrarlo en una consola, escribirlo en el disco, agregarlo a una base de datos o generar un correo electrónico.
Los marcos de registro más sencillos, como Java Logging Framework de Object Guy , combinan el registrador y el appender. Esto simplifica el funcionamiento predeterminado, pero reduce la capacidad de configuración, especialmente si el proyecto se traslada entre diferentes entornos.
Leñador
Un registrador es un objeto que permite a la aplicación registrar información sin importar dónde se envíe o almacene la salida. La aplicación registra un mensaje pasando un objeto o un objeto y una excepción con un nivel de gravedad opcional al objeto registrador bajo un nombre o identificador determinado.
Nombre
Un registrador tiene un nombre. Este nombre suele estar estructurado jerárquicamente, con puntos (.) que separan los niveles. Un esquema común consiste en usar el nombre de la clase o paquete que realiza el registro. Tanto Log4j como la API de registro de Java permiten definir manejadores en niveles superiores de la jerarquía.
Por ejemplo, el registrador podría llamarse " com.sun.some.UsefulClass". El manejador se puede definir para cualquiera de los siguientes:
comcom.suncom.sun.somecom.sun.some.UsefulClass
Mientras exista un controlador definido en algún lugar de esta pila, se podrá registrar información. Por ejemplo, un mensaje registrado en el com.sun.some.UsefulClassregistrador puede ser escrito por el com.suncontrolador. Normalmente, existe un controlador global que recibe y procesa los mensajes generados por cualquier registrador.
Nivel de gravedad
El mensaje se registra en un nivel determinado. Los nombres de los niveles comunes se copian de Apache Commons Logging (aunque la API de registro de Java define nombres de niveles diferentes):
El sistema de registro mantiene el nivel de registro actual para cada registrador. El nivel de registro puede configurarse para que sea más o menos restrictivo. Por ejemplo, si el nivel de registro se establece en "ADVERTENCIA", se registrarán todos los mensajes de ese nivel o superior: ERROR y FATAL.
Se pueden asignar niveles de gravedad tanto a los registradores como a los agentes de depuración. Ambos deben estar habilitados para un nivel de gravedad determinado para que se genere la salida. Por lo tanto, un registrador habilitado para la salida de depuración no generará ninguna salida si el controlador que recibe el mensaje no está también habilitado para la depuración.
Filtros
Los filtros permiten ignorar o registrar un evento de registro. El filtro más común es el nivel de registro, documentado en la sección anterior. Los marcos de registro como Log4j 2 y SLF4J también proporcionan marcadores, que, al adjuntarse a un evento de registro, pueden utilizarse para filtrar. Los filtros también permiten aceptar o rechazar eventos de registro en función de las excepciones que se produzcan, los datos del mensaje de registro, los datos de un ThreadLocal expuesto a través de la API de registro o mediante otros métodos.
Formateadores, maquetadores o renderizadores
Un formateador es un objeto que da formato a un objeto dado. Generalmente, esto consiste en tomar el objeto binario y convertirlo a una representación de cadena. Cada framework define un formato de salida predeterminado que se puede modificar si se desea.
Añadedores o manipuladores
Los Appenders escuchan los mensajes con un nivel de gravedad mínimo especificado o superior. El Appender toma el mensaje que recibe y lo publica adecuadamente. Las disposiciones de los mensajes incluyen:
- pantalla en la consola
- escribir en un archivo o en el registro del sistema
- agregar a una tabla de base de datos
- Distribución a través de Java Messaging Services
- enviar por correo electrónico
- escribir en un socket
- descartar al "bit-bucket" (/dev/null)
Comparación de características
Consideraciones
JCL y Log4j son muy comunes simplemente porque llevan mucho tiempo en el mercado y durante mucho tiempo fueron las únicas opciones. La flexibilidad de slf4j (que utiliza Logback internamente) lo ha convertido en una opción popular.
SLF4J es un conjunto de adaptadores (o shims) para el registro de eventos que le permiten imitar cualquier otro framework. De esta forma, se pueden incorporar múltiples bibliotecas de terceros a una aplicación, independientemente del framework de registro que cada una haya elegido. Sin embargo, toda la salida de registro se genera de forma estándar, normalmente mediante Logback.
Log4j 2 proporciona tanto una API como una implementación. La API se puede enrutar a otras implementaciones de registro equivalentes a cómo funciona SLF4J. A diferencia de SLF4J, la API de Log4j 2 registra objetos Message [ 2 ] en lugar de cadenas para mayor flexibilidad y también admite expresiones Java Lambda. [ 3 ]
JCL no es propiamente un marco de registro, sino una capa de abstracción para uno. Por lo tanto, requiere un marco de registro subyacente, aunque puede usar su propio SimpleLogregistrador por defecto.
JCL, SLF4J y la API Log4j 2 son útiles para desarrollar bibliotecas reutilizables que necesitan escribir en el sistema de registro subyacente que utilice la aplicación. Esto también proporciona flexibilidad en entornos heterogéneos donde es probable que cambie el marco de registro, aunque en la mayoría de los casos, una vez elegido, no suele ser necesario modificarlo durante la vida del proyecto. SLF4J y Log4j 2 se benefician de ser más recientes y se basan en las lecciones aprendidas de marcos anteriores. Además, JCL presenta problemas conocidos con los cargadores de clases al determinar qué biblioteca de registro debe encapsular [ 4 ] , lo que ahora ha reemplazado a JCL. [ 5 ]
La API de registro de Java viene incluida con Java. Aunque técnicamente es independiente de la implementación predeterminada de Java, reemplazarla por una implementación alternativa puede resultar complicado, por lo que muchos desarrolladores la confunden con la API de registro de Java. La configuración se realiza únicamente mediante archivos externos, lo que dificulta su modificación sobre la marcha (otros frameworks admiten la configuración programática). La implementación predeterminada solo proporciona unos pocos manejadores y formateadores, lo que significa que la mayoría de los usuarios tendrán que escribir los suyos propios. [ 6 ]
Véase también
- SLF4J
- Log4j
- registro de regreso
- Javolution LogContext se basa en la programación contextual (el marco de registro real se puede seleccionar en tiempo de ejecución).
- Inteligencia en tiempo de ejecución
Referencias
Enlaces externos
- API de registro de Java 6.0
- Registro de bienes comunes
- Protomateria
- Herramientas de registro de código abierto en Java
- La licencia Apache 2.0.
- Logback: sucesor del popular proyecto Log4j.
- tinylog: utilidad de registro minimalista con un registrador estático.
- Loggifier: Una herramienta que inserta código de registro en archivos .class, .jar y .ear.
- JLV - Visor de registros de Java que actualmente está disponible como complemento para el IDE Eclipse
- Perf4j
- SLF4J
- Log4j 2
- Java (plataforma de software)
- Registro informático