Red de conocimiento informático - Aprendizaje de programación - Explicación del código fuente de Logback Appender

Explicación del código fuente de Logback Appender

En el marco de registro de inicio de sesión, cada registrador está asociado con un Appender. El Appender es una interfaz para enviar contenido de registro real a la consola, archivos, etc. Se puede decir que es un componente muy importante. Aplicaciones y ampliaciones diarias.

El más importante es el método doAppend(). Esta interfaz será llamada para la salida de cada evento de registro.

Entre ellos, los que conocemos son ConsoleAppender, FileAppender y RollingFileAppender. Además, existe una interfaz AsyncAppender muy importante. La salida asincrónica es una función muy importante del registro de inicio de sesión. Todos heredan de la clase abstracta UnsynchronizedAppenderBase.

En UnsynchronizedAppenderBase, echemos un vistazo a uno de los métodos implementados más importantes, doAppend()

De hecho, este método no tiene nada que ver con esto, solo usa la plantilla método, por lo que la subclase específica deja que el método append() de la subclase implemente la lógica específica.

En la clase OutputStreamAppender, hay varias variables miembro más importantes.

El objetivo principal del codificador es convertir el contenido del evento de registro que se generará en una matriz de bytes y luego escribir la matriz de bytes en OutputStream.

outputStream puede ser una consola o un archivo.

Luego verifique el método append()

Este método no hace nada, y luego verifique el método subAppend() específicamente.

En este método puedes ver lo que hace el codificador y un método importante: writeBytes()

Este método escribe la matriz de bytes en el flujo de salida.

En resumen: el proceso de registrar eventos de registro consiste en convertir el contenido de salida en una matriz de bytes a través del codificador y luego escribirlo en un flujo de salida específico.

ConsoleAppender hereda de OutputStreamAppender. La única diferencia es la ubicación de las salidas de ConsoleAppender a la consola, y el flujo de salida de OutputStream también debe ser la consola.

Se llama al método start() al inicializar la configuración de logback.xml, y el flujo de salida outputStream (consola) se configura en el método start().

FileAppender Si necesita generar eventos de registro en un archivo, necesita el flujo de salida del archivo FileOutStream. Consulte el método start() para inicializar FileAppender.

Vea principalmente el método openFile()

En este método, vaya al nuevo archivo File() a través del nombre del archivo, luego encapsúlelo como ResilientFileOutputStream y luego configure setOutputStream() , Envíe registros a este archivo.

Salida asincrónica, es decir, los eventos de registro se colocan primero en la cola y luego un hilo dedicado va a la cola para obtener los eventos de registro y consumirlos.

Vea varias variables miembro importantes en la clase AsyncAppenderBase

Hay una lista de Appenders dentro de AppenderAttachableImpl, que es específicamente para Appenders como ConsoleAppender y FileAppender.

BlockingQueue es una cola y Worker es un hilo de consumo.

Por ejemplo, defina un Appender asincrónico en el archivo de configuración

A continuación, veamos cómo se implementa la salida asincrónica.

El método start() se inicializa definiendo la cola ArrayBlockingQueue e iniciando el hilo de trabajo.

El siguiente es el método append()

En el método append(), el evento de registro no se procesará inmediatamente, pero se llamará al método put()

, los eventos de registro se colocan en la cola de mensajes. Luego es procesado por el subproceso de trabajo

El subproceso de trabajo obtiene () el evento de la cola y luego es procesado por el Appender específico

Ver la llamada de doAppend() , Se ha comparado con el Appender anterior y es el mismo.

Este artículo solo representa la comprensión personal del autor. Si hay alguna inexactitud, corríjame.