141 votes

Approche correcte de l'exploitation forestière globale

Quel est le modèle de journalisation des applications en Go ? Si j'ai, disons, 5 goroutines dont j'ai besoin d'enregistrer, dois-je...

  • Créez un seul log.Logger et le faire circuler ?
  • Transmettez un pointeur à cette log.Logger ?
  • Chaque goroutine ou fonction doit-elle créer un logger ?
  • Dois-je créer le logger comme une variable globale ?

2voto

msingh Points 41

J'ai trouvé le paquet de journaux par défaut ( https://golang.org/pkg/log/ ) quelque peu contraignant. Par exemple, aucune prise en charge des journaux d'information et de débogage.
Après avoir cherché un peu, j'ai décidé d'utiliser https://github.com/golang/glog . Cela semble être un port de https://github.com/google/glog et donne une flexibilité décente dans la journalisation. Par exemple, lorsque vous exécutez une application localement, vous pouvez vouloir un journal de niveau DEBUG, mais vous pouvez vouloir l'exécuter uniquement au niveau INFO/ERROR en production. La liste complète des fonctionnalités/guide est, ici https://google-glog.googlecode.com/svn/trunk/doc/glog.html (C'est pour le module c++, mais pour la plupart, cela se traduit par le portage golang)

0voto

Chids Points 1573

L'un des modules de journalisation que vous pouvez envisager est le suivant klog . Il supporte l'enregistrement en 'V' qui donne la flexibilité d'enregistrer à un certain niveau.

klog est un fork de glog et surmonte les inconvénients suivants

  • glog présente de nombreux "gotchas" et introduit des défis dans les environnements conteneurisés, qui ne sont pas tous bien documentés.
  • glog ne fournit pas un moyen facile de tester les journaux, ce qui nuit à la stabilité des logiciels qui l'utilisent.
  • glog est basé sur C++ et klog est une implémentation pure de golang.

Exemple de mise en œuvre

package main

import (
    "flag"

    "k8s.io/klog"

)

type myError struct {
    str string
}

func (e myError) Error() string {
    return e.str
}

func main() {
    klog.InitFlags(nil)
    flag.Set("v", "1")
    flag.Parse()

    klog.Info("hello", "val1", 1, "val2", map[string]int{"k": 1})
    klog.V(3).Info("nice to meet you")
    klog.Error(nil, "uh oh", "trouble", true, "reasons", []float64{0.1, 0.11, 3.14})
    klog.Error(myError{"an error occurred"}, "goodbye", "code", -1)
    klog.Flush()
}

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