Connexion ultra rapide, structurée et nivelée dans Go.
go get -u go.uber.org/zap
Notez que zap ne prend en charge que les deux versions mineures les plus récentes de Go.
Dans des contextes où les performances sont bonnes, mais pas critiques, utilisez SugaredLogger
. Il est 4 à 10 fois plus rapide que les autres packages de journalisation structurée et comprend des API structurées et de style printf
.
logger , _ := zap . NewProduction ()
defer logger . Sync () // flushes buffer, if any
sugar := logger . Sugar ()
sugar . Infow ( "failed to fetch URL" ,
// Structured context as loosely typed key-value pairs.
"url" , url ,
"attempt" , 3 ,
"backoff" , time . Second ,
)
sugar . Infof ( "Failed to fetch URL: %s" , url )
Lorsque les performances et la sécurité du type sont critiques, utilisez le Logger
. Il est encore plus rapide que SugaredLogger
et alloue beaucoup moins, mais il ne prend en charge que la journalisation structurée.
logger , _ := zap . NewProduction ()
defer logger . Sync ()
logger . Info ( "failed to fetch URL" ,
// Structured context as strongly typed Field values.
zap . String ( "url" , url ),
zap . Int ( "attempt" , 3 ),
zap . Duration ( "backoff" , time . Second ),
)
Consultez la documentation et la FAQ pour plus de détails.
Pour les applications qui se connectent via le hot path, la sérialisation basée sur la réflexion et le formatage des chaînes sont d'un coût prohibitif : ils sont gourmands en CPU et effectuent de nombreuses petites allocations. En d’autres termes, l’utilisation encoding/json
et fmt.Fprintf
pour enregistrer des tonnes d’ interface{}
ralentit votre application.
Zap adopte une approche différente. Il comprend un encodeur JSON sans réflexion et sans allocation, et le Logger
de base s'efforce d'éviter les frais de sérialisation et les allocations dans la mesure du possible. En construisant SugaredLogger
de haut niveau sur cette base, zap permet aux utilisateurs de choisir quand ils doivent compter chaque allocation et quand ils préfèrent une API plus familière et moins typée.
Tel que mesuré par sa propre suite d'analyse comparative, zap est non seulement plus performant que les packages de journalisation structurée comparables, mais il est également plus rapide que la bibliothèque standard. Comme tous les benchmarks, prenez-les avec des pincettes. 1
Enregistrez un message et 10 champs :
Emballer | Temps | Temps % pour zapper | Objets alloués |
---|---|---|---|
⚡ zapper | 656 ns/op | +0% | 5 allocations/opération |
⚡ zap (sucré) | 935 ns/op | +43% | 10 allocations/opération |
zérolog | 380 ns/opération | -42% | 1 allocation/opération |
kit de voyage | 2249 ns/op | +243% | 57 allocations/opération |
journal (LogAttrs) | 2479 ns/op | +278% | 40 allocations/opération |
bosser | 2481 ns/op | +278% | 42 allocations/opération |
sommet/journal | 9591 ns/op | +1362% | 63 allocations/opération |
journal15 | 11393 ns/op | +1637% | 75 allocations/opération |
logrus | 11654 ns/op | +1677% | 79 allocations/opération |
Enregistrez un message avec un logger qui possède déjà 10 champs de contexte :
Emballer | Temps | Temps % pour zapper | Objets alloués |
---|---|---|---|
⚡ zapper | 67 ns/op | +0% | 0 allocation/opération |
⚡ zap (sucré) | 84 ns/op | +25% | 1 allocation/opération |
zérolog | 35 ns/op | -48% | 0 allocation/opération |
bosser | 193 ns/op | +188% | 0 allocation/opération |
journal (LogAttrs) | 200 ns/opération | +199% | 0 allocation/opération |
kit de voyage | 2460 ns/opération | +3572% | 56 allocations/opération |
journal15 | 9038 ns/op | +13390% | 70 allocations/opération |
sommet/journal | 9068 ns/op | +13434% | 53 allocations/opération |
logrus | 10521 ns/op | +15603% | 68 allocations/opération |
Enregistrez une chaîne statique, sans aucun contexte ni modèle de style printf
:
Emballer | Temps | Temps % pour zapper | Objets alloués |
---|---|---|---|
⚡ zapper | 63 ns/op | +0% | 0 allocation/opération |
⚡ zap (sucré) | 81 ns/op | +29% | 1 allocation/opération |
zérolog | 32 ns/op | -49% | 0 allocation/opération |
bibliothèque standard | 124 ns/op | +97% | 1 allocation/opération |
bosser | 196 ns/op | +211% | 0 allocation/opération |
journal (LogAttrs) | 200 ns/opération | +217% | 0 allocation/opération |
kit de voyage | 213 ns/op | +238% | 9 allocations/opération |
sommet/journal | 771 ns/op | +1124% | 5 allocations/opération |
logrus | 1439 ns/op | +2184% | 23 allocations/opération |
journal15 | 2069 ns/op | +3184% | 20 allocations/opération |
Toutes les API sont finalisées et aucune modification majeure ne sera apportée dans la série de versions 1.x. Les utilisateurs de systèmes de gestion des dépendances compatibles Semver doivent épingler zap sur ^1
.
Nous encourageons et soutenons une communauté de contributeurs active et saine, y compris vous ! Les détails se trouvent dans le guide de contribution et le code de conduite. Les responsables de zap gardent un œil sur les problèmes et les pull request, mais vous pouvez également signaler tout comportement négatif à [email protected]. Cette liste de diffusion est un espace privé et sécurisé ; même les responsables de zap n'y ont pas accès, alors n'hésitez pas à nous imposer des normes élevées.
Publié sous la licence MIT.
1 En particulier, gardez à l’esprit que nous pouvons effectuer des comparaisons avec des versions légèrement plus anciennes d’autres packages. Les versions sont épinglées dans le fichier benchmarks/go.mod. ↩