3 votes

Limitations du package de journalisation GO lang

Je suis en train de mettre en œuvre un logger en Go. Je pense utiliser logrus pour cela. Je voulais comprendre les limitations de la package de log interne.

Je sais que si nous voulons écrire des logs dans un fichier ou mettre en place des logs de fichier roulants, etc., nous devrons ajouter cette fonctionnalité manuellement. Y a-t-il d'autres limitations pour lesquelles nous devons choisir un package de log externe?

2voto

icza Points 3857

L'enregistrement dans un fichier en utilisant le package intégré log n'est pas un problème, vous pouvez utiliser log.SetOutput() ou Logger.SetOutput() pour définir une destination io.Writer autre que par défaut os.Stderr, par exemple un fichier *os.File.

Ce qui manque et est souvent souhaité, ce sont des journaux de niveaux (par exemple, INFO, WARN, DEBUG, ERROR etc.). Pour une explication, lisez l'article de blog Dave Cheney : Parlons du journalisation.

Vous ne pouvez pas non plus imposer l'utilisation d'un log.Logger spécifique par des packages désignés à moins que ces packages "acceptent" de coopérer (par exemple, ils fournissent une fonction SetLogger()).

La rotation des fichiers journaux est également une fonction manquante.

D'un autre côté, il est également très facile de "étendre" le journal standard pour enregistrer dans MongoDB par exemple, pour plus de détails, consultez Go : Créer une interface io.Writer pour enregistrer dans une base de données MongoDB. En utilisant MongoDB, vous pouvez également utiliser une Collection capsulée qui vous donnera implicitement une fonction "rotation de fichier".

2voto

Enregistrer dans un fichier peut se faire de plusieurs manières.

La façon de faire de l'application en 12 facteurs (non seulement la façon de faire de l'application en 12 facteurs, mais les applications en 12 facteurs insistent sur cette méthode) serait de logger vers STDOUT et/ou STDERR, puis de rediriger la sortie ailleurs pour le déploiement. Cela facilite également le développement. De plus, si vous utilisez quelque chose comme des conteneurs pour déployer votre programme, ils enregistrent la sortie STDOUT et STDERR du conteneur dans un fichier au départ.

Le package std lib log propose deux façons de changer la sortie vers un fichier.

Une méthode est la suivante:

log.SetOutput()

log.Println("quelque message")

L'autre méthode est la suivante:

logger := log.New(, , )

logger.Println("quelque message")

La deuxième option est également comment vous pouvez implémenter différents niveaux de logs (ex: INFO, DEBUG, WARN, ERROR, etc) en ayant un logger distinct pour chaque niveau.

Cependant, logrus vous offre déjà une grande partie de cela, donc c'est probablement votre meilleur choix si vous voulez simplement implémenter rapidement un système de logging.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X