Maison  >  Article  >  développement back-end  >  Analyse complète de la bibliothèque de journalisation Golang : vous aide à choisir l'outil de journalisation le plus approprié

Analyse complète de la bibliothèque de journalisation Golang : vous aide à choisir l'outil de journalisation le plus approprié

WBOY
WBOYoriginal
2024-01-16 09:29:181515parcourir

Analyse complète de la bibliothèque de journalisation Golang : vous aide à choisir loutil de journalisation le plus approprié

Analyse complète de la bibliothèque de journaux Golang : vous aider à choisir l'outil de journalisation le plus approprié

Dans le processus de développement du langage Go, la journalisation est une fonction essentielle. Une journalisation appropriée peut nous aider à détecter rapidement et précisément les problèmes et à analyser le comportement du système. Choisir une bibliothèque de journaux qui vous convient peut améliorer l'efficacité du développement et réduire la difficulté du code. Cet article présentera plusieurs bibliothèques de journaux Golang couramment utilisées pour comparer et analyser différents scénarios d'application.

  1. log library

log library est une bibliothèque de journalisation intégrée dans le langage Go. Elle est facile à utiliser et est l'une des bibliothèques les plus couramment utilisées dans le développement quotidien. Cette bibliothèque peut générer des journaux sur la console, des journaux système et des fichiers spécifiés, et peut optimiser les informations des journaux en définissant des paramètres tels que le préfixe, le niveau de sortie et l'horodatage.

Par exemple, nous pouvons déclarer un enregistreur via le code suivant :

import "log"

func main() {
    log.SetFlags(log.Lshortfile | log.Ldate | log.Lmicroseconds)
    log.SetPrefix("[MYAPP] ")
    log.Println("Starting MyApp...")
}

En exécutant le code ci-dessus, nous pouvons voir la sortie suivante sur la console :

2021/12/22 10:51:54  [MYAPP] main.go:8: Starting MyApp...

Nous pouvons voir l'horodatage enregistré et le journal à partir de la sortie Le préfixe et le nom du fichier et le contenu spécifique de la sortie. Selon les trois paramètres de la méthode SetFlags(), nous pouvons définir le type d'heure et de date, le nom du fichier, l'horodatage au niveau de la milliseconde et d'autres informations affichées dans les informations du journal de sortie.

La bibliothèque de journaux est facile à utiliser, mais elle présente quelques défauts, comme l'impossibilité de définir le niveau de journalisation, la non prise en charge de la sortie asynchrone, etc.

  1. zap library

zap library est une bibliothèque de journalisation hautes performances et de type sécurisé, spécialement développée et conçue pour le langage Go. Étant donné que zap utilise les fonctionnalités du langage Go lui-même, telles que les pointeurs et les structures, ses performances sont supérieures à celles des autres bibliothèques de journalisation.

Par rapport à la bibliothèque de journaux, zap fournit des fonctions plus puissantes, telles que la sortie asynchrone, le réglage du niveau, le réglage du format du journal, etc. Les développeurs peuvent personnaliser le format du journal selon leurs besoins et utiliser SugaredLogger ou Logger pour enregistrer différents niveaux de journaux. De plus, zap prend également en charge des fonctionnalités telles que les encodeurs personnalisés, la rotation des journaux et l'archivage.

Le code suivant est un exemple d'utilisation de la bibliothèque zap pour générer des journaux :

import "go.uber.org/zap"

func main() {
    logger, _ := zap.NewProduction()
    logger.Info("This is an information log",
        zap.Int("logCount", 1),
        zap.String("appName", "MyApp"),
    )
}

Le code ci-dessus crée une instance d'enregistreur. Nous enregistrons un journal d'informations via la méthode Info() et l'enregistrons en utilisant la méthode Int() et String. () respectivement des informations supplémentaires supplémentaires. Le résultat de sortie est le suivant :

{"level":"info","ts":1638284066.5883522,"caller":"main.go:10","msg":"This is an information log","logCount":1,"appName":"MyApp"}

Le journal de sortie contient le niveau de journalisation, l'horodatage, le nom du fichier et des informations supplémentaires spécifiées.

  1. Bibliothèque go-logr/logr

La bibliothèque go-logr/logr est une bibliothèque de journaux relativement nouvelle qui fournit une interface unifiée et une API pour résumer les détails d'implémentation des différentes bibliothèques de journaux. La bibliothèque utilise l'interface Logger pour encapsuler l'implémentation sous-jacente et fournit une variété de pilotes de bibliothèque sous-jacents, tels que zap, log, logrus, glog, etc.

L'injection de dépendances et la conception modulaire de la bibliothèque go-logr/logr la rendent hautement évolutive et maintenable dans des systèmes complexes. Il fournit de riches méthodes d'interface Logger et peut être étendu selon les besoins.

Le code suivant est un exemple de bibliothèque go-logr/logr :

import (
    "fmt"
    "os"

    "github.com/go-logr/logr"
    "github.com/go-logr/stdr"
)

func main() {
    lgr := stdr.New(log.New(os.Stdout, "", 0))
    lgr = lgr.WithValues("key", "value") // Adding key-value pairs.

    lgr.Info("A message in the log is logged here")
    lgr.Error(fmt.Errorf("some error happened"), "An error occured") // Adding an error message to the log.
}

Dans le code ci-dessus, le journal de la bibliothèque standard est utilisé comme backend, et stdr l'utilise pour envelopper l'interface Logger.

En résumé, voici plusieurs façons courantes d'implémenter la journalisation dans Golang. Nous pouvons choisir la bibliothèque de journaux la plus appropriée en fonction de nos besoins pour améliorer l'efficacité et la fiabilité de la journalisation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn