Blitzschnelle, strukturierte und ebene Protokollierung in Go.
go get -u go.uber.org/zap
Beachten Sie, dass Zap nur die beiden neuesten Nebenversionen von Go unterstützt.
In Kontexten, in denen die Leistung gut, aber nicht kritisch ist, verwenden Sie SugaredLogger
. Es ist 4-10x schneller als andere strukturierte Protokollierungspakete und umfasst sowohl strukturierte als auch printf
-artige APIs.
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 )
Wenn Leistung und Typsicherheit entscheidend sind, verwenden Sie den Logger
. Es ist sogar schneller als SugaredLogger
und weist weit weniger zu, unterstützt aber nur strukturierte Protokollierung.
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 ),
)
Weitere Informationen finden Sie in der Dokumentation und in den FAQ.
Für Anwendungen, die sich im Hot Path anmelden, sind reflexionsbasierte Serialisierung und String-Formatierung unerschwinglich teuer – sie sind CPU-intensiv und erfordern viele kleine Zuweisungen. Anders ausgedrückt: Die Verwendung encoding/json
und fmt.Fprintf
zum Protokollieren unzähliger interface{}
s macht Ihre Anwendung langsam.
Zap verfolgt einen anderen Ansatz. Es umfasst einen reflexionsfreien JSON-Encoder ohne Zuweisung, und der Basis- Logger
ist bestrebt, Serialisierungsaufwand und Zuweisungen nach Möglichkeit zu vermeiden. Durch den Aufbau des High-Level SugaredLogger
auf dieser Grundlage ermöglicht zap Benutzern die Wahl, wann sie jede Zuweisung zählen müssen und wann sie eine vertrautere, locker typisierte API bevorzugen.
Gemessen an der eigenen Benchmarking-Suite ist Zap nicht nur leistungsfähiger als vergleichbare strukturierte Protokollierungspakete, sondern auch schneller als die Standardbibliothek. Wie bei allen Benchmarks sind auch diese mit Vorsicht zu genießen. 1
Protokollieren Sie eine Nachricht und 10 Felder:
Paket | Zeit | Zeit % zum Zappen | Zugeordnete Objekte |
---|---|---|---|
⚡ zappen | 656 ns/op | +0 % | 5 Zuweisungen/Op |
⚡ zap (gezuckert) | 935 ns/op | +43 % | 10 Zuweisungen/Op |
Zerolog | 380 ns/op | -42 % | 1 Zuweisungen/Op |
Go-Kit | 2249 ns/op | +243 % | 57 Zuweisungen/Op |
slog (LogAttrs) | 2479 ns/op | +278 % | 40 Zuweisungen/Op |
Slog | 2481 ns/op | +278 % | 42 Zuweisungen/Op |
Apex/Log | 9591 ns/op | +1362 % | 63 Zuweisungen/Op |
log15 | 11393 ns/op | +1637 % | 75 Zuweisungen/Op |
Logrus | 11654 ns/op | +1677 % | 79 Zuweisungen/Op |
Protokollieren Sie eine Nachricht mit einem Logger, der bereits über 10 Kontextfelder verfügt:
Paket | Zeit | Zeit % zum Zappen | Zugeordnete Objekte |
---|---|---|---|
⚡ zappen | 67 ns/op | +0 % | 0 Zuweisungen/Op |
⚡ zap (gezuckert) | 84 ns/op | +25 % | 1 Zuweisungen/Op |
Zerolog | 35 ns/op | -48 % | 0 Zuweisungen/Op |
Slog | 193 ns/op | +188 % | 0 Zuweisungen/Op |
slog (LogAttrs) | 200 ns/op | +199 % | 0 Zuweisungen/Op |
Go-Kit | 2460 ns/op | +3572 % | 56 Zuweisungen/Op |
log15 | 9038 ns/op | +13390 % | 70 Zuweisungen/Op |
Apex/Log | 9068 ns/op | +13434 % | 53 Zuweisungen/Op |
Logrus | 10521 ns/op | +15603 % | 68 Zuweisungen/Op |
Protokollieren Sie eine statische Zeichenfolge ohne Kontext oder Vorlage printf
-Stil:
Paket | Zeit | Zeit % zum Zappen | Zugeordnete Objekte |
---|---|---|---|
⚡ zappen | 63 ns/op | +0 % | 0 Zuweisungen/Op |
⚡ zap (gezuckert) | 81 ns/op | +29 % | 1 Zuweisungen/Op |
Zerolog | 32 ns/op | -49 % | 0 Zuweisungen/Op |
Standardbibliothek | 124 ns/op | +97 % | 1 Zuweisungen/Op |
Slog | 196 ns/op | +211 % | 0 Zuweisungen/Op |
slog (LogAttrs) | 200 ns/op | +217 % | 0 Zuweisungen/Op |
Go-Kit | 213 ns/op | +238 % | 9 Zuweisungen/Op |
Apex/Log | 771 ns/op | +1124 % | 5 Zuweisungen/Op |
Logrus | 1439 ns/op | +2184 % | 23 Zuweisungen/Op |
log15 | 2069 ns/op | +3184 % | 20 Zuweisungen/Op |
Alle APIs sind finalisiert und in der 1.x-Versionsreihe werden keine wichtigen Änderungen vorgenommen. Benutzer von Semver-fähigen Abhängigkeitsmanagementsystemen sollten zap an ^1
anpinnen.
Wir ermutigen und unterstützen eine aktive, gesunde Gemeinschaft von Mitwirkenden – Sie eingeschlossen! Einzelheiten finden Sie im Beitragsleitfaden und im Verhaltenskodex. Die Zap-Betreuer behalten Probleme und Pull-Requests im Auge, aber Sie können negatives Verhalten auch an [email protected] melden. Diese E-Mail-Liste ist ein privater, sicherer Ort; Sogar die Zap-Betreuer haben keinen Zugriff, also zögern Sie nicht, uns an einen hohen Standard zu halten.
Veröffentlicht unter der MIT-Lizenz.
1 Beachten Sie insbesondere, dass wir möglicherweise Vergleiche mit etwas älteren Versionen anderer Pakete durchführen. Versionen sind in der Datei benchmarks/go.mod angeheftet. ↩