Escribió un pequeño middleware, código abierto

La dirección del proyecto, puedes hacer clic en una estrella cuando pases :)

github.com/saigu/LogLe…

1. ¿Por qué necesita LogLevelSwitch?

Con la expansión continua de la escala comercial, la localización rápida de cada falla en línea es un gran desafío para los desarrolladores.

La salida de la lógica crítica para el negocio a través de registros es uno de los medios efectivos para localizar problemas. Sin embargo, el registro excesivo provocará una sobrecarga adicional en el sistema y, en casos extremos, incluso puede provocar un tiempo de inactividad del sistema.

Por lo tanto, para tener en cuenta tanto el rendimiento como la ubicación rápida en escenarios de fallas, debemos poder ajustar el nivel de registro en tiempo real, a fin de generar más información de registro para solucionar problemas en línea o reducir el consumo de rendimiento causado por impresión de registros.

Escribió un pequeño middleware de código abierto: cambio de nivel de registro dinámico en tiempo de ejecución

Basado en los antecedentes anteriores, nació nuestro LogLevelSwitch.

LogLevleSwitch está integrado en la aplicación en forma de middleware. Basado en la capacidad de actualización en caliente del centro de configuración, se da cuenta de la capacidad de ajustar dinámicamente el nivel de registro cuando la aplicación se está ejecutando.

2. Características

  • Compatibilidad : admite Log4j, Log4j2, Logback, etc.
  • Extensibilidad : puede usar el método de modificación de configuración basado en archivos de configuración local predeterminado ( solo para pruebas y aprendizaje locales ). En producción, se "recomienda encarecidamente" acceder a su propio centro de configuración a través de SPI para lograr actualizaciones en caliente.
  • Facilidad de uso : fácil acceso, efecto excepcional, puede usarlo en solo 5 minutos.

3. Arquitectura básica

Escribió un pequeño middleware de código abierto: cambio de nivel de registro dinámico en tiempo de ejecución

Introduzca nuestro LogLevelSwitch en la aplicación Aplicación.

LogLevelSwitch contiene dos componentes principales, LogContext y SwitchContext.

  • SwitchContext: guarde el estado del conmutador y la información de configuración específica del registrador obtenida del centro de configuración. Al monitorear el mensaje del centro de configuración, el contenido del interruptor se actualiza en tiempo real y se realiza la notificación de modificación del nivel del registrador.
  • LogContext: guarda el registrador original y la información del nivel de registro de la aplicación, y puede actualizar o restaurar el nivel del registrador de acuerdo con la configuración del conmutador.

4. Inicio rápido

No hay mucho que decir, ven y pruébalo.

4.1 普通spring项目

只用三步即可完成。

  • STEP 1: 应用中pom引入依赖

    io.github.saigu log-switch-core 1.0.0-beta
  • STEP 2: 构建config Bean

    @Configuration public class LogLevelSwitchConfig { @Bean LogLevelSwitch logLevelSwitch() { return new LogLevelSwitch(); } }

  • STEP 3: 接入配置中心

声明配置中心的SPI实现。

在resource路径下新建 META-INF/services,创建文件名为
io.github.saigu.log.level.sw.listener.ConfigListener的文件,并写入需要的「实现类名」。

实现一:项目自带的LocalFile配置中心

如果你还没有自己的配置中心,那就使用我们自带的基于本地配置文件进行本地测试学习。

「实现类名」为
io.github.saigu.log.level.sw.listener.LocalFileListener

注意,生产上 强烈推荐 通过「实现二」接入你自己的配置中心,实现热更新。

在resource目录下新建LocalSwitch.json文件:

Escribió un pequeño middleware de código abierto: cambio de nivel de registro dinámico en tiempo de ejecución

然后填写开关配置:

{
  "status": "on",
  "loggerBeans": [
    {
      "name": "all",
      "level": "error"
    }
  ]
}
复制代码

实现二:自定义SPI扩展配置,接入自己的配置中心

如果你已经有了自己的配置中心,那就可以通过SPI扩展配置,接入自己的配置中心。

「实现类名」为你自己的实现类名。

4.2 springboot项目

两步接入。

  • STEP 1: 应用中pom引入依赖

    io.github.saigu log-switch-starter 1.0.0-beta
  • STEP 2: 接入配置中心
    同「方式一」

5.关键配置

SwitchContext是我们的关键配置:

参数名

含义

可选值

status

开关状态

"off": deshabilitar, usar la aplicación "on": habilitar, usar el nivel de configuración del centro de configuración.

Lista

lista de niveles de registro

Si el nombre del primer LoggerBean en la lista es all, afecta el nivel de registrador global

Ejemplo de referencia:

{
  "status": "on",
  "loggerBeans": [
    {
      "name": "all",
      "level": "error"
    }
  ]
}
复制代码

6. Precauciones

Para estandarizar el uso de registros y evitar afectar el efecto del cambio a una versión anterior, la implementación del marco de registro del que depende el proyecto se detectará durante la inicialización.

Tenga en cuenta que si el registro solicita

"Hay múltiples implementaciones de marco de registro, se recomienda mantener solo una, de lo contrario, afectará el efecto del interruptor de degradación de registro"

Indica que se han detectado varias implementaciones del marco de registro en la aplicación.

Se recomienda eliminar marcos de registro redundantes del pom para garantizar que se utilice un marco de registro único.

7. Diseño detallado TL;DR

Este artículo todavía se centra en la introducción, y hablaré sobre la implementación más adelante, así que estad atentos.

Lo he visto todo hasta el final, la originalidad no es fácil, sígueme y dale me gusta~

Reorganice los fragmentos de conocimiento y construya un mapa de conocimiento de Java: github.com/saigu/JavaK… (Es muy conveniente consultar artículos históricos)

Supongo que te gusta

Origin juejin.im/post/7085215463499792414
Recomendado
Clasificación