Zap / Logrus pour Go : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction à la journalisation en Go : Zap et Logrus

\n\n

La journalisation est un composant essentiel de toute application sérieuse. Elle permet de suivre l'état du programme, d'enregistrer les erreurs, d'analyser les performances et de déboguer le code en environnement de production. La bibliothèque standard de Go inclut le package log, mais ses capacités sont limitées : pas de niveaux de journalisation (sauf basiques), pas de sortie structurée, pas de formats flexibles. Pour résoudre ces problèmes, deux bibliothèques puissantes ont été créées : Zap (par Uber) et Logrus (l'un des premiers journaliers populaires).

\n\n

Dans cet article, nous allons détailler les deux bibliothèques, leurs méthodes, des exemples d'utilisation et les bonnes pratiques. Vous apprendrez à configurer une journalisation structurée, à travailler avec les niveaux, à ajouter des champs contextuels et à éviter les erreurs courantes.

\n\n

Qu'est-ce que Zap ?

\n

Zap est une bibliothèque de journalisation structurée haute performance développée par Uber. Elle est conçue pour la vitesse et une allocation mémoire minimale. Zap prend en charge deux modes de fonctionnement : SugaredLogger (pratique mais légèrement plus lent) et Logger (performance maximale).

\n\n

Qu'est-ce que Logrus ?

\n

Logrus est l'une des premières et des plus populaires bibliothèques de journalisation en Go. Elle offre une API simple, la prise en charge des niveaux, des formateurs (JSON, Texte) et des hooks pour l'intégration avec des systèmes externes (par exemple, Sentry, Slack). Logrus est plus facile à apprendre, mais moins performant que Zap.

\n\n

Installation

\n

L'installation des deux bibliothèques se fait de manière standard via go get :

\n\n
// Installation de Zap\ngo get -u go.uber.org/zap\n\n// Installation de Logrus\ngo get -u github.com/sirupsen/logrus\n
\n\n

Après l'installation, vous pouvez les importer dans votre projet :

\n\n
import (\n    "go.uber.org/zap"\n    "github.com/sirupsen/logrus"\n)\n
\n\n

Démarrage rapide avec un exemple de code

\n\n

Exemple avec Zap

\n
package main\n\nimport (\n    "go.uber.org/zap"\n)\n\nfunc main() {\n    // Création d'un journalier de production (haute performance)\n    logger, _ := zap.NewProduction()\n    defer logger.Sync() // vide le tampon avant la sortie\n\n    // Journalisation d'un message avec des champs\n    logger.Info("Application démarrée",\n        zap.String("version", "1.0.0"),\n        zap.Int("port", 8080),\n    )\n\n    // Utilisation de SugaredLogger pour plus de commodité\n    sugar := logger.Sugar()\n    sugar.Infow("Utilisateur connecté",\n        "user", "john_doe",\n        "ip", "192.168.1.1",\n    )\n}\n
\n\n

Exemple avec Logrus

\n
package main\n\nimport (\n    "github.com/sirupsen/logrus"\n)\n\nfunc main() {\n    // Configuration du format de sortie (JSON)\n    logrus.SetFormatter(&logrus.JSONFormatter{})\n\n    // Définition du niveau de journalisation\n    logrus.SetLevel(logrus.InfoLevel)\n\n    // Journalisation d'un message avec des champs\n    logrus.WithFields(logrus.Fields{\n        "version": "1.0.0",\n        "port":    8080,\n    }).Info("Application démarrée")\n\n    // Journalisation d'une erreur\n    logrus.WithFields(logrus.Fields{\n        "user": "john_doe",\n        "ip":   "192.168.1.1",\n    }).Warn("Tentative de connexion avec un mot de passe incorrect")\n}\n
\n\n

Méthodes et fonctions principales

\n\n

1. Zap : NewProduction() / NewDevelopment()

\n

Ce qu'elles font : Créent un journalier préconfiguré pour un environnement de production ou de développement. Le journalier de production utilise le format JSON et est optimisé pour la vitesse. Le journalier de développement utilise une sortie textuelle colorée et inclut les traces de pile.

\n

Paramètres : Aucun (retourne *zap.Logger et une erreur).

\n

Exemple :

\n
prodLogger, _ := zap.NewProduction()\ndevLogger, _ := zap.NewDevelopment()\n
\n\n

2. Zap : Logger.Info(),

Recommendations