Dans cet article, je vais vous expliquer comment modifier le niveau de journalisation de votre application sans redémarrer votre application.
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.
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)
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)
GoFr requiert la réponse de l'URL au format suivant avec deux champs obligatoires :
{ "data": { "serviceName": "test-service", "logLevel": "DEBUG" } }
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 des configurations.
DB_HOST=localhost DB_USER=root DB_PASSWORD=password DB_NAME=log-level DB_PORT=2001 DB_DIALECT=mysql
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
Ajoutons le fichier main.go avec les migrations pour créer une table et nous utiliserons la fonctionnalité AddRESTHandler pour enregistrer la route.
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() }
Après avoir exécuté le service de journalisation, nous verrons les journaux suivants :
Nous avons toutes les routes REST enregistrées.
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" }'
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" }'
Pour obtenir le niveau de journalisation, envoyez la requête suivante :
curl --location 'localhost:8000/level/1'
La même URL sera utilisée dans les configurations de notre application dont le niveau de log doit être modifié à distance.
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.
Performance améliorée:
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 point de terminaison 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
Autres bénéfices:
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).
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3