Maison > développement back-end > Golang > Modification du niveau de journalisation d'exécution à l'aide de Golang et GoFr

Modification du niveau de journalisation d'exécution à l'aide de Golang et GoFr

PHPz
Libérer: 2024-07-22 20:56:53
original
810 Les gens l'ont consulté

Dans cet article, je vais vous expliquer comment modifier le niveau de journalisation de votre application sans redémarrer votre application.

Introduction

Les niveaux de journalisation sont généralement considérés par ordre d'importance : activez les niveaux "sans importance" dans le développement (avis, débogage, etc.), mais activez uniquement les niveaux "les plus importants" (avertissement, erreur, etc.) dans production, où les ressources comme le temps CPU et l'espace disque sont précieuses.

Mais que se passe-t-il si votre application s'exécute au niveau ERREUR et que vous commencez à rencontrer de nombreux problèmes, mais que vous ne parvenez pas à les comprendre à partir des journaux de niveau ERREUR, modifier le niveau de journalisation en redéployant l'application prendra beaucoup de temps et de ressources.

De plus, l'exécution de votre application au niveau INFO ou DEBUG en production générera un grand nombre de journaux qui peuvent submerger le système de journalisation, entraînant une augmentation des opérations d'E/S et de la consommation de ressources.

Pour nous sauver de ces problèmes, GoFr - The Ultimate Golang Framework fournit un moyen sécurisé de modifier le niveau de journalisation sans redémarrer votre application.

Modification du niveau de journalisation

Pour modifier le niveau de journalisation, toute application GoFr nécessite la configuration suivante :

REMOTE_LOG_URL=<URL to user remote log level endpoint> (e.g., https://log-service.com/log-levels?id=1)
Copier après la connexion

GoFr récupère le point de terminaison fourni toutes les 15 secondes par défaut pour obtenir le dernier niveau de journalisation, cet intervalle peut être augmenté ou diminué en ajoutant la configuration suivante.

REMOTE_LOG_FETCH_INTERVAL=<Interval in seconds> (default: 15)
Copier après la connexion

Service de niveau de journalisation

GoFr requiert la réponse de l'URL au format suivant avec deux champs obligatoires :

{
    "data": {
       "serviceName": "test-service",
       "logLevel": "DEBUG"
    }
}
Copier après la connexion

Créons le service de niveau journal qui fournira le niveau de journalisation à notre application.

J'utiliserai GoFr pour créer le service, reportez-vous à la documentation pour en savoir plus.

Nous utiliserons MySQL comme base de données, pour ajouter MySQL, ajoutez les configurations suivantes dans le fichier .env dans le répertoire configs.

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=password
DB_NAME=log-level
DB_PORT=2001
DB_DIALECT=mysql
Copier après la connexion

Pour exécuter le conteneur Docker MySQL, exécutez la commande suivante

docker run --name gofr-logger -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=log-level -p 2001:3306 -d mysql:8.0.30
Copier après la connexion

Ajoutons le fichier main.go avec les migrations pour créer une table et nous utiliserons la fonctionnalité AddRESTHandler pour enregistrer l'itinéraire.

main.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()
}
Copier après la connexion

Après avoir exécuté le service de journalisation, nous verrons les journaux suivants :

LOGS FOR LOG-LEVEL CHANGE SERVICE STARTUP

Nous avons tous les itinéraires REST enregistrés.

Pour créer un service envoyez la demande suivante :

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

Pour mettre à jour le niveau de journalisation, envoyez la demande suivante :

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

Pour obtenir le niveau de journalisation, envoyez la demande suivante :

curl --location 'localhost:8000/level/1'
Copier après la connexion

La même URL sera utilisée dans les configs de notre application dont le niveau de log doit être modifié à distance.

CONCLUSION

En utilisant la fonction de modification du niveau de journalisation à distance du GoFr, vous bénéficierez d'avantages tels que :

  • Ajustements sans effort :
    Modifiez le niveau de journalisation à tout moment sans redémarrer l'application. Ceci est particulièrement utile lors du dépannage.

  • Visibilité améliorée :
    Passez facilement à un niveau de journalisation plus détaillé (par exemple, DEBUG) pour obtenir des informations plus approfondies sur des problèmes spécifiques, puis revenez à un niveau moins détaillé (par exemple, INFO) pour un fonctionnement régulier.

  • Performances améliorées :
    La génération d'un grand nombre de journaux peut surcharger le système de journalisation, entraînant une augmentation des opérations d'E/S et de la consommation de ressources, le passage au niveau d'avertissement ou d'erreur réduit le nombre de journaux et améliore les performances, et RÉDUCTION DU COÛT DU CLOUD.

Soutenez GoFr en donnant une ⭐étoile : https://github.com/gofr-dev/gofr

De plus, vous avez accès au endpoint public gratuit pour exporter et visualiser les traces de votre application@tracer.gofr.dev. 
Pour l'activer, ajoutez la configuration suivante dans votre fichier .env

TRACE_EXPORTER=gofr
Copier après la connexion

Autres avantages :
Si vous contribuez au GOFR soit par le développement, soit par la rédaction d'articles. Vous pouvez obtenir gratuitement des swags (T-shirts, autocollants) en remplissant le formulaire présenté sur leur GitHub Lisezmoi (en bas).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal