La journalisation est la technique de conservation des enregistrements à des fins futures dans le cycle de développement logiciel. La journalisation est essentielle car les journaux facilitent le débogage, les diagnostics, le dépannage et la surveillance des projets.
Vous pouvez utiliser la journalisation à différents niveaux de vos applications pour les erreurs, les avertissements, le débogage, etc.
Se connecter Aller
La bibliothèque standard Go contient un Journal package riche en fonctionnalités. Il gère différents niveaux de journalisation et les méthodes de journalisation de base dont vous aurez besoin pour votre application. Cependant, le Journal package n'est peut-être pas le meilleur choix si votre application est complexe et que vous souhaitez donner la priorité à la productivité.
La Journal package ne fournit pas de fonctionnalité pour les journaux structurés. Les packages de journalisation structurée fournissent des fonctionnalités qui simplifient et améliorent le processus de journalisation. L'écosystème Go abrite de nombreux packages de ce type.
1. Zap par Uber
Zap est un package de journalisation rapide, structuré et nivelé conçu par l'équipe open source d'Uber pour l'écriture de journaux dans Go. Uber construit le package Zap pour fournir une journalisation plus performante que les autres packages de l'écosystème Go, y compris le Journal forfait.
Il existe deux enregistreurs distincts dans le package Zap. La Enregistreur La fonction gère les cas de performances critiques. La SucréBûcheron offre plus de flexibilité avec son API de style printf, mais il s'accompagne d'un petit compromis en termes de performances. Même le package SugaredLogger, plus lent, est 4 à 10 fois plus rapide que les autres packages de journalisation structurée.
Exécutez ce qui suit sur une ligne de commande pour installer le package Zap :
aller vous donner aller.uber.org/zap
Vous aurez besoin d'une version récente de Go pour installer et utiliser les fonctionnalités du package Zap avec succès.
enregistreur, euh := zap. NouvelleProduction() // zapper l'instance de l'enregistreur
si erreur != néant {
fmt. Println (err. Erreur())
}reporter enregistreur. Synchronisation() // vide les tampons, s'il y en a
sucre := bûcheron. Sucre() // enregistreur sucré icidu sucre. Infow("échec de la récupération de l'URL",
// Contexte structuré sous forme de paires clé-valeur faiblement typées.
"URL", URL,
"tentative", 3,
"backoff", temps. Deuxième,
)
du sucre. Infof("Échec de la récupération de l'URL: %s", URL) // en utilisant le formateur de style printf
La enregistreur variable est une instance de zapper enregistreur, et le Sucre La méthode est une instance de journalisation sucrée.
La Infow méthode écrit dans la sortie, et la Infos est la version formatée du Infow méthode.
2. Le forfait Logrus
Logrus est un package de journalisation structuré pour les applications Go. Logrus est compatible avec l'enregistreur de bibliothèque standard, avec des fonctionnalités similaires. Si vous avez de l'expérience avec le Journal package, vous trouverez une suite fonctionnant avec Logrus.
Logrus ne prend pas en charge le formatage JSON par défaut. Mais vous pouvez toujours utiliser une bibliothèque JSON comme la bibliothèque intégrée json package avec Logrus’ DéfinirFormatter méthode.
Logrus prend en charge la journalisation à différents niveaux et, bien qu'il ne soit pas aussi performant que la plupart des packages de journalisation, il est riche en fonctionnalités et sûr.
Vous pouvez utiliser cette commande pour installer Logrus dans votre répertoire de travail :
aller obtenir github.com/sirupsen/logrus
Voici un exemple de journalisation avec le package Logrus.
importer (
"os"
log "github.com/sirupsen/logrus" // importation d'alias
)fonctionprincipale {
Journal. DéfinirFormat(&log. JSONFormat{}) // définit le formateur sur JSON
Journal. SetOutput (os. sortie standard) // sortie vers la sortie standard
Journal. SetLevel (log. niveau d'avertissement) // définit le niveau d'avertissement
Journal. AvecChamps (log. Des champs{
"Nom": "John Doe",
"Âge": 40,
}).Info("Données biographiques de John")
}
Ce code importe la bibliothèque Logrus et lui crée un alias nommé Journal. Dans le principale fonction, il appelle la DéfinirFormatter méthode pour définir un formateur pour les journaux. Vous pouvez utiliser le Définir la sortie méthode pour spécifier où les messages du journal doivent aller; dans ce cas, sortie standard.
La DéfinirNiveau La méthode enregistre les avertissements au niveau spécifié ou au-dessus.
3. Forfait ZeroLog
ZeroLog est une bibliothèque rapide, inspirée de Zap et dédiée à JSON pour la journalisation, conçue pour la performance. Il utilise une API de chaînage unique qui permet à Zerolog d'écrire des événements JSON et de journaliser sans allocations ni réflexions.
Zerolog vise à fournir une API plus facile à utiliser et des performances supérieures tout en gardant la base de code et l'API simples. Il se concentre sur la journalisation structurée et vous pouvez utiliser le ConsoleWriter méthode pour une jolie journalisation sur votre console.
Il y a une faible allocation, une journalisation nivelée, un échantillonnage, des crochets, des champs contextuels et une journalisation des erreurs avec des fonctionnalités de suivi de pile en option sur le package Zerolog. Vous pouvez également intégrer Zerolog avec le le contexte et http paquets.
Exécutez cette commande dans le terminal de votre espace de travail pour installer le Zérolog forfait.
aller obtenir -u [github.com/rs/zerolog/log](http://github.com/rs/zerolog/log)
Voici un exemple simple d'utilisation du package Zerolog pour une opération simple.
importer (
"github.com/rs/zerolog" // zerolog pour les configurations
"github.com/rs/zerolog/log" // log pour la journalisation
)fonctionprincipale() {
// L'heure UNIX est plus rapide et plus petite que la plupart des horodatages
zérolog. TimeFieldFormat = zérolog. HeureFormatUnix
Journal. Imprimer("bonjour le monde")
}
La TimeFieldFormatTimeFieldFormat est définie sur le format d'heure Unix, et l'option Imprimer La commande écrit l'argument texte sur la sortie standard.
4. Le paquet Log15
La Log15 package est une boîte à outils simple et avisée pour la journalisation lisible par l'homme et la machine avec les meilleures pratiques en Go. Log15 modélise le io et http packages de la bibliothèque standard Go comme alternative aux packages intégrés Journal forfait.
Les fonctionnalités du package Log15 incluent :
- une API simple et facile à comprendre
- journalisation structurée avec des paires clé-valeur
- enregistreurs enfants avec contexte privé
- interface de gestionnaire pour la construction de configurations de journalisation personnalisées sur une petite API
- support terminal coloré
- prise en charge intégrée de la journalisation des fichiers, des flux, des journaux système et des journaux réseau
- mettre en mémoire tampon les enregistrements en sortie.
Vous pouvez installer Log15 à vos packages Go avec cette commande.
aller obtenir github.com/inconshreveable/log15
Il est facile de démarrer avec le package Log15. Voici un exemple d'instanciation d'un enregistreur et de journalisation des informations et des niveaux d'erreur avec le package.
importer (
log "github.com/inconshreveable/log15" // importation d'alias en tant que journal
)
fonctionprincipale() {
serverLog := journal. Nouveau("dépôt", "Nouveau dépôt") // instanciation du logger
serverLog. Info("Vérification de l'état de la couche de référentiel réussie") // journal d'informations
serverLog. Erreur ("échec de la vérification de l'état de la couche de référentiel") // journal des erreurs
}
La serverLog variable est une instance de l'enregistreur Log15; la Nouveau La méthode renvoie un enregistreur avec les arguments de contexte que vous fournissez.
La Info renvoie un message d'information et la méthode Erreur méthode renvoie un message d'erreur.
Écrire des journaux utiles et compréhensibles
La journalisation peut être aussi critique que toute autre partie du processus de développement. Cela peut sembler très facile au début, mais s'en tenir aux pratiques essentielles peut compliquer le processus. Pour gérer tous les cas extrêmes et tous les aspects de la journalisation, vous devez utiliser un package de journalisation pour faciliter les choses.
Utilisez les niveaux, la structure et le contexte de journalisation pour rendre vos journaux compréhensibles et adaptés à leurs objectifs.