"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Cambio de nivel de registro en tiempo de ejecución mediante Golang y GoFr

Cambio de nivel de registro en tiempo de ejecución mediante Golang y GoFr

Publicado el 2024-07-30
Navegar:148

En este artículo, compartiré cómo puedes cambiar el nivel de registro de tu aplicación sin reiniciarla.

Introducción

Los niveles de registro generalmente se consideran en orden de importancia: active los niveles "sin importancia" en el desarrollo (aviso, depuración y similares), pero habilite solo los niveles "más importantes" (advertencia, error, etc.) en producción, donde recursos como el tiempo de CPU y el espacio en disco son valiosos.

Pero, ¿qué pasa si su aplicación se ejecuta en el nivel de ERROR y comienza a enfrentar muchos problemas, pero no puede resolverlos a partir de los registros del nivel de ERROR? Cambiar el nivel de registro volviendo a implementar la aplicación requerirá mucho tiempo y recursos.

Además, ejecutar su aplicación en el nivel INFO o DEBUG en producción generará una gran cantidad de registros que pueden saturar el sistema de registro, lo que provocará un aumento de las operaciones de E/S y del consumo de recursos.

Para rescatarnos de estos problemas, GoFr - The Ultimate Golang Framework proporciona una forma segura de cambiar el nivel de registro sin reiniciar su aplicación.

Cambiar el nivel de registro

Para cambiar el nivel de registro, cualquier aplicación GoFr requiere la siguiente configuración:

REMOTE_LOG_URL= (e.g., https://log-service.com/log-levels?id=1)

GoFr recupera el punto final proporcionado cada 15 segundos de forma predeterminada para obtener el último nivel de registro; este intervalo se puede aumentar o disminuir agregando la siguiente configuración.

REMOTE_LOG_FETCH_INTERVAL= (default: 15)

Servicio de nivel de registro

GoFr requiere la respuesta de la URL en el siguiente formato con dos campos obligatorios:

{
    "data": {
       "serviceName": "test-service",
       "logLevel": "DEBUG"
    }
}

Creemos el servicio de nivel de registro que proporcionará el nivel de registro a nuestra aplicación.

Usaré GoFr para crear el servicio; consulte la documentación para obtener más información.

Usaremos MySQL como base de datos. Para agregar MySQL, agregue las siguientes configuraciones en el archivo .env en el directorio de configuraciones.

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=password
DB_NAME=log-level
DB_PORT=2001
DB_DIALECT=mysql

Para ejecutar el contenedor acoplable MySQL, ejecute el siguiente comando

docker run --name gofr-logger -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=log-level -p 2001:3306 -d mysql:8.0.30

Agreguemos el archivo main.go con las migraciones para crear la tabla y usaremos la función AddRESTHandler para registrar la ruta.

principal.go

package main

import (
 "gofr.dev/pkg/gofr"
 "gofr.dev/pkg/gofr/migration"
)

const createTable = `CREATE TABLE level (
    id INT PRIMARY KEY,
    service_name VARCHAR(255) NOT NULL,
    log_level VARCHAR(50) NOT NULL
);
`

func createTableLevel() migration.Migrate {
 return migration.Migrate{
  UP: func(d migration.Datasource) error {
   _, err := d.SQL.Exec(createTable)
   if err != nil {
    return err
   }

   return nil
  },
 }
}

type Level struct {
 ID          int    `json:"id"`
 ServiceName string `json:"serviceName"`
 LogLevel    string `json:"logLevel"`
}

func (u *Level) RestPath() string {
 return "level"
}

func main() {
 app := gofr.New()

 app.Migrate(map[int64]migration.Migrate{1: createTableLevel()})

 err := app.AddRESTHandlers(&Level{})
 if err != nil {
  app.Logger().Fatalf("Failed to register routes for level struct: %v", err)
 }

 app.Run()
}

Después de ejecutar el servicio de registro, veremos los siguientes registros:

LOGS FOR LOG-LEVEL CHANGE SERVICE STARTUP

Tenemos todas las rutas REST registradas.

Para crear un servicio envíe la siguiente solicitud:

curl --location 'localhost:8000/level' \
--header 'Content-Type: application/json' \
--data '{
    "id":1,
    "logLevel":"INFO",
    "serviceName":"gofr-app"
}'

Para actualizar el nivel de registro envíe la siguiente solicitud:

curl --location --request PUT 'localhost:8000/level/1' \
--header 'Content-Type: application/json' \
--data '{
    "id":1,
    "logLevel":"DEBUG",
    "serviceName":"gofr-app"
}'

Para obtener el nivel de registro, envíe la siguiente solicitud:

curl --location 'localhost:8000/level/1'

La misma URL se utilizará en las configuraciones de nuestra aplicación cuyo nivel de registro debe cambiarse de forma remota.

CONCLUSIÓN

Al utilizar la función de cambio de nivel de registro remoto de GoFr, obtendrá beneficios como:

  • Ajustes sin esfuerzo:
    Modifique el nivel de registro en cualquier momento sin reiniciar la aplicación. Esto es especialmente útil durante la resolución de problemas.

  • Visibilidad mejorada:
    Cambie fácilmente a un nivel de registro más detallado (p. ej., DEBUG) para obtener información más detallada sobre problemas específicos y luego vuelva a un nivel menos detallado (p. ej., INFO) para el funcionamiento normal.

  • Desempeño mejorado:
    Generar una gran cantidad de registros puede saturar el sistema de registro, lo que genera un aumento de las operaciones de E/S y del consumo de recursos; cambiar al nivel de advertencia o error reduce la cantidad de registros y mejora el rendimiento, y REDUCE EL COSTO DE LA NUBE.

Apoya a GoFr dándole una ⭐estrella: https://github.com/gofr-dev/gofr

Además, tiene acceso al punto final público gratuito para exportar y ver los rastros de su aplicación @ tracer.gofr.dev. 
Para habilitarlo, agregue la siguiente configuración en su archivo .env

TRACE_EXPORTER=gofr

Otros beneficios:
Si contribuye al GOFR ya sea en el desarrollo o escribiendo artículos. Puedes obtener obsequios (camisetas, pegatinas) gratis completando el formulario presentado en su GitHub Léame (en la parte inferior).

Declaración de liberación Este artículo se reproduce en: https://dev.to/aryanmehrotra/remote-runtime-log-level-change-using-golang-gofr-54d8?1 Si hay alguna infracción, comuníquese con [email protected] para eliminar él
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3