Aller: Désactiver un journal.Enregistreur?
J'ai quelques lourdement instrumentés de code qui rend l'utilisation de la log
paquet. Maintenant, il est venu le temps pour désactiver la journalisation, et je ne peux pas savoir comment désactiver l'enregistrement standard.
Ai-je raté quelque chose? Dois-je vérifier un drapeau avant de faire des appels du journal, ou de faire des commentaires dans la production?
Vous devez vous connecter pour publier un commentaire.
Pour désactiver complètement les journaux, c'est effectivement mieux d'appeler
log.SetFlags(0)
Joril et la sortie no-opio.Writer
(c'est à dire,log.SetOutput(ioutil.Discard)
)Mais même après cela, les opérations de ralenti autour de De 500 à 600 ns/op1
Cela peut encore être coupés courts (autour de 100 ns/op) à l'aide d'un custom
Logger
mise en œuvre, et la mise en œuvre de toutes les fonctions non-op -- comme l'a démontré ici (seulement primordialPrintln
pour bervity).Alternative à toutes ces est d'utiliser un custom de journalisation des niveaux et le jeu à remplir OFF.
Noter cependant, l'un des les plus couramment utilisés de la bibliothèque pour l'enregistrement (logrus) a les conséquences de performance -- la même chose peut être trouvé dans la repères où il effectuer avec 3K+ ns/op, peu importe.
Opinion biaisée: à partir de repères, la bibliothèque aller de l'enregistrement de effectue dans le par la coutume
Logger
mise en œuvre de laLevel
à-1
, quel que soit le backend et le formatage(la source de référence peut être trouvé ici)
la sortie de l'indice de référence est la suivante:
#1: YMMV, testé sur i7-4500U CPU @ 1.80 GHz
Pas de raison de créer votre propre type de commune io.Auteur quand il en existe un dans l'io/ioutil paquet.
io/ioutil
.log.SetFlags(0)
devrait la soulager un peu, je penseint
valeur de retour est0
? (c'est à dire peut-être devrions-nous retournerlen(b)
lorsque l'argument estb []byte
?)log
paquet ignoreint
valeur de retour, nous avons donc préférable de ne pas perdre de temps dans une telle fréquente de la fonction dans le code de production.log
en Aller? Sont la plupart de la journalisation des appels finalement retiré (ou en commentaire) si ils sont à des fins de traçabilité?infoLogger
eterrLogger
, et ce, à des produits adaptés au développement et à la production (en utilisant les options de ligne de commande). Vous pouvez en avoir une autre,debugLogger
ou quelque chose comme ça, et de le désactiver dans la production.Cette approche permet à la désactivation de la journalisation à l'exécution:
Et cette approche permet d'activer ou de désactiver l'enregistrement pour l'ensemble de l'exécution:
Où
some.Constant
serait une constante que vous définissez avant la compilation (la production d'un "production" binaire) ou une variable qui est définie une seule fois lors de l'exécution du programme via les options de ligne de commande (quelque chose commemyprogram --enable-logging=true
)Avec les deux approches, vous pouvez laisser votre code actuel, presque entièrement intacte.
Depuis
SetOutput()
n'est définie pour le mondial de l'enregistreur, une coutume de l'écrivain est toujours utile pour d'autres enregistreurs. Un court chemin de l'écriture est comme ceci:Une note pour les autres à venir ici à la recherche de ce et d'autres fonctionnalités de journalisation: jetez un oeil à la log4go package en tant que couvre la désactivation de la journalisation, la définition de niveaux de journal, journal de rotation, la redirection vers un fichier, etc qui pourraient être utiles.
Voir le doc à http://godoc.org/code.google.com/p/log4go