lazygophers/log

Une bibliothèque de journalisation Go performante et flexible, construite sur zap, offrant des fonctionnalités riches et une API simple.
📖 Langues de documentation
✨ Fonctionnalités
- 🚀 Haute performance : Construite sur zap avec réutilisation d'objets Entry via un pool, réduisant l'allocation mémoire
- 📊 Niveaux de journalisation riches : Niveaux Trace, Debug, Info, Warn, Error, Fatal, Panic
- ⚙️ Configuration flexible :
- Contrôle du niveau de journalisation
- Enregistrement des informations d'appelant
- Informations de trace (y compris l'ID de goroutine)
- Préfixes et suffixes de journalisation personnalisés
- Cibles de sortie personnalisées (console, fichiers, etc.)
- Options de formatage de journalisation
- 🔄 Rotation de fichiers : Support de la rotation horaire des fichiers journaux
- 🔌 Compatibilité Zap : Intégration transparente avec zap WriteSyncer
- 🎯 API simple : API claire similaire à la bibliothèque de journalisation standard, facile à utiliser
🚀 Démarrage rapide
Installation
go get github.com/lazygophers/log
Utilisation de base
package main
import (
"github.com/lazygophers/log"
)
func main() {
// Utiliser le logger global par défaut
log.Debug("Message de débogage")
log.Info("Message d'information")
log.Warn("Message d'avertissement")
log.Error("Message d'erreur")
// Utiliser la sortie formatée
log.Infof("L'utilisateur %s s'est connecté avec succès", "admin")
// Configuration personnalisée
customLogger := log.New().
SetLevel(log.InfoLevel).
EnableCaller(false).
SetPrefixMsg("[MyApp]")
customLogger.Info("Ceci est un journal du logger personnalisé")
}
📚 Utilisation avancée
Logger personnalisé avec sortie fichier
package main
import (
"os"
"github.com/lazygophers/log"
)
func main() {
// Créer un logger avec sortie fichier
logger := log.New().
SetLevel(log.DebugLevel).
EnableCaller(true).
EnableTrace(true).
SetOutput(os.Stdout, log.GetOutputWriterHourly("/var/log/myapp.log"))
logger.Debug("Message de débogage avec informations d'appelant")
logger.Info("Message d'information avec informations de trace")
}
Contrôle du niveau de journalisation
package main
import "github.com/lazygophers/log"
func main() {
logger := log.New().SetLevel(log.WarnLevel)
// Seuls les messages warn et supérieurs seront journalisés
logger.Debug("Ceci ne sera pas journalisé") // Ignoré
logger.Info("Ceci ne sera pas journalisé") // Ignoré
logger.Warn("Ceci sera journalisé") // Journalisé
logger.Error("Ceci sera journalisé") // Journalisé
}
🔧 Options de configuration
Configuration du Logger
| Méthode |
Description |
Valeur par défaut |
SetLevel(level) |
Définir le niveau minimum de journalisation |
DebugLevel |
EnableCaller(enable) |
Activer/désactiver les informations d'appelant |
false |
EnableTrace(enable) |
Activer/désactiver les informations de trace |
false |
SetCallerDepth(depth) |
Définir la profondeur de l'appelant |
2 |
SetPrefixMsg(prefix) |
Définir le préfixe du journal |
"" |
SetSuffixMsg(suffix) |
Définir le suffixe du journal |
"" |
SetOutput(writers...) |
Définir les cibles de sortie |
os.Stdout |
Niveaux de journalisation
| Niveau |
Description |
TraceLevel |
Le plus verbeux, pour le suivi détaillé |
DebugLevel |
Informations de débogage |
InfoLevel |
Informations générales |
WarnLevel |
Messages d'avertissement |
ErrorLevel |
Messages d'erreur |
FatalLevel |
Erreurs fatales (appelle os.Exit(1)) |
PanicLevel |
Erreurs de panique (appelle panic()) |
🏗️ Architecture
Composants principaux
- Logger : Structure de journalisation principale avec niveaux, sorties, formateurs et profondeur d'appelant configurables
- Entry : Enregistrement de journal unique avec support complet de métadonnées
- Level : Définitions de niveaux de journalisation et fonctions utilitaires
- Format : Interface et implémentations de formatage de journalisation
Optimisations de performance
- Pool d'objets : Réutilisation des objets Entry pour réduire l'allocation mémoire
- Enregistrement conditionnel : Enregistrement des champs coûteux uniquement lorsque nécessaire
- Vérification rapide du niveau : Vérification du niveau de journalisation à la couche la plus externe
- Conception sans verrou : La plupart des opérations ne nécessitent pas de verrou
📊 Comparaison des performances
| Caractéristique |
lazygophers/log |
zap |
logrus |
journalisation standard |
| Performance |
Haute |
Haute |
Moyenne |
Basse |
| Simplicité de l'API |
Haute |
Moyenne |
Haute |
Haute |
| Richesse de fonctionnalités |
Moyenne |
Haute |
Haute |
Basse |
| Flexibilité |
Moyenne |
Haute |
Haute |
Basse |
| Courbe d'apprentissage |
Basse |
Moyenne |
Moyenne |
Basse |
🔗 Documentation associée
🚀 Obtenir de l'aide
📄 Licence
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.
🤝 Contribution
Nous accueillons les contributions ! Veuillez consulter notre Guide de contribution pour plus de détails.
lazygophers/log est conçu pour être la solution de journalisation de choix pour les développeurs Go qui valorisent à la fois la performance et la simplicité. Que vous construisiez un petit utilitaire ou un système distribué à grande échelle, cette bibliothèque offre le bon équilibre entre fonctionnalités et facilité d'utilisation.