Maison > développement back-end > Golang > le corps du texte

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

PHPz
Libérer: 2024-07-22 20:56:53
original
643 人浏览过

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" en développement (avis, débogage, etc.), mais activez uniquement les niveaux "les plus importants" (avertissement, erreur, etc.) en 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, exécuter 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= (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= (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 journal à 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 des configurations.

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 configurations 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 des swags (T-shirts, autocollants) gratuits en remplissant le formulaire présenté sur leur GitHub Lisezmoi (en bas).

以上是Modification du niveau de journalisation d'exécution à l'aide de Golang et GoFr的详细内容。更多信息请关注PHP中文网其他相关文章!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!