Heim > Backend-Entwicklung > Golang > ZAP: Entsperren Sie das volle Potenzial der Anmeldung in Go

ZAP: Entsperren Sie das volle Potenzial der Anmeldung in Go

DDD
Freigeben: 2025-01-28 18:03:09
Original
189 Leute haben es durchsucht

Go Language High Performance Library Zap Detaillierte Erklärung und Anwendung

In diesem Artikel wird das von Uber entwickelte Hoch -Performance -GO -Protokollbibliotheks -Zap untersucht, das seine Eigenschaften, Verwendungsmethoden und erweiterte Anwendungen abdeckt, z. B. die Abteilung für Protokolldateien und die Ausgabe von Ebenen. ZAP ist berühmt für seine Geschwindigkeit und strukturierte Protokollausgabe.

GitHub -Adresse: https://www.php.cn/link/26AC49243AA3065A10CA1796C2D1E57B

Zap: Unlock the Full Potential of Logging in Go

Beispiel Erstellung

ZAP bietet drei Methoden zum Erstellen von Logger -Instanzen:

,

und zap.NewProduction(). Der Unterschied besteht darin, dass sie die Details der Informationen aufzeichnen und der Parametertyp auf die Zeichenfolge beschränkt ist. zap.NewDevelopment() zap.Example()

<code class="language-go">// 代码示例
var log *zap.Logger
log = zap.NewExample()
log, _ := zap.NewDevelopment()
log, _ := zap.NewProduction()
log.Debug("这是一条DEBUG信息")
log.Info("这是一条INFO信息")</code>
Nach dem Login kopieren
Nach dem Login kopieren
<code>// Example 输出
{"level":"debug","msg":"这是一条DEBUG信息"}
{"level":"info","msg":"这是一条INFO信息"}</code>
Nach dem Login kopieren
Nach dem Login kopieren
<code>// Development 输出
2025-01-28T00:00:00.000+0800    DEBUG    development/main.go:7    这是一条DEBUG信息
2025-01-28T00:00:00.000+0800    INFO    development/main.go:8    这是一条INFO信息</code>
Nach dem Login kopieren
Nach dem Login kopieren
Drei Erstellungsmethoden Vergleich:
<code>// Production 输出
{"level":"info","ts":1737907200.0000000,"caller":"production/main.go:8","msg":"这是一条INFO信息"}
{"level":"info","ts":1737907200.0000000,"caller":"production/main.go:9","msg":"这是一条包含字段的INFO信息","region":["us-west"],"id":2}</code>
Nach dem Login kopieren
Nach dem Login kopieren

und
    Verwenden Sie die Ausgabe von JSON -Format aus.
  • Example Entwicklung Production Development
  • Drucken von Stapelinformationen aus der Warnstufe für die Verfolgung.
  • Paket/Datei/Zeilennummer (Methode) immer gedruckt.
      Fügen Sie dem Schwanz zusätzliche Felder als JSON -Zeichenfolge hinzu.
    • Drucken Sie den Namen des Großbuchstabens.
    • Millisekunden -Level ISO8601 -Format zum Drucken von Zeitstempel verwenden.
    • Produktion
    Keine Aufzeichnungen über Debugging -Level -Nachrichten.
  • Für Fehler und Panikdatensätze werden die Dateien im Stapel verfolgt, das Warnstufe jedoch nicht. Fügen Sie immer die Dateiinformationen des Anrufers hinzu.
    • Druckdatum mit einem Zeitstempelformat.
    • Drucken Sie den Namen des Kleinbuchstabens.
    • Formatausgabe
    • ZAP liefert zwei Logger -Typen:
    und
  • . Der Unterschied besteht darin, dass Sie
erhalten können, indem Sie die Methode

des Hauptprotokolls aufrufen und die Anweisung im Printf -Format aufzeichnen:

*zap.Logger Schreiben Sie die Datei *zap.SugaredLogger standardmäßig protokollieren Sie die Ausgabe an die Anwendungskonsole. Um die Anfragen zu erleichtern, kann das Protokoll in die Datei geschrieben werden. Zu diesem Zeitpunkt können die drei zuvor genannten Instanzen nicht verwendet werden, sondern .Sugar(). SugaredLogger

<code class="language-go">var sugarLogger *zap.SugaredLogger

func InitLogger() {
  logger, _ := zap.NewProduction()
    sugarLogger = logger.Sugar()
}

func main() {
    InitLogger()
    defer sugarLogger.Sync()
    sugarLogger.Errorf("获取URL %s 失败:错误 = %s", url, err)
}</code>
Nach dem Login kopieren
Nach dem Login kopieren

gleichzeitig ausgeben zur Konsole und Datei

Wenn Sie gleichzeitig an die Konsole und die Datei ausgegeben werden müssen, müssen Sie nur zap.New() ändern. Beispiele wie folgt:

<code class="language-go">package main

import (
    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
    "os"
)

var log *zap.Logger
func main() {
    writeSyncer, _ := os.Create("./info.log")                           // 日志文件存储目录
    encoderConfig := zap.NewProductionEncoderConfig()                    // 指定时间格式
    encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
    encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
    encoder := zapcore.NewConsoleEncoder(encoderConfig)                 // 获取编码器,NewJSONEncoder() 输出JSON格式,NewConsoleEncoder() 输出纯文本格式
    core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)    // 第三及后续参数是写入文件的日志级别。ErrorLevel模式下,只记录错误级别的日志。
    log = zap.New(core,zap.AddCaller())                                // AddCaller() 用于显示文件名和行号。
    log.Info("hello world")
    log.Error("hello world")
}</code>
Nach dem Login kopieren
Dateisegmentierung
<code>// 日志文件输出结果:
2025-01-28T00:00:00.000+0800    INFO    geth/main.go:18 hello world
2025-01-28T00:00:00.000+0800    ERROR   geth/main.go:19 hello world</code>
Nach dem Login kopieren
Protokolldateien werden im Laufe der Zeit immer größer. Um zu vermeiden, dass eine große Anzahl von Festplattenspeichern einnimmt, werden Protokolldateien gemäß bestimmten Bedingungen benötigt. ZAP selbst liefert keine Dateisegmentierungsfunktion, aber Sie können das von ZAP empfohlene Holzfällerpaket verwenden, um dies zu erreichen.

<code class="language-go">// 代码示例
var log *zap.Logger
log = zap.NewExample()
log, _ := zap.NewDevelopment()
log, _ := zap.NewProduction()
log.Debug("这是一条DEBUG信息")
log.Info("这是一条INFO信息")</code>
Nach dem Login kopieren
Nach dem Login kopieren

Schreiben Sie die Datei auf der Ebene

Um die Anfragen von Managern zu erleichtern, werden die Protokolle unter der Fehlerebene normalerweise in die info.log geschrieben. Sie müssen nur den dritten Parameter der -Methode ändern und die Datei dann auf die Informationen und Fehler teilen. Beispiele wie folgt: zapcore.NewCore

Nach der Änderung werden die Protokollprotokolle für Protokoll- und Debuggen in info.log gespeichert, und die Fehler -Level -Protokolle werden allein in der Datei "Fehler.log" gespeichert.
<code>// Example 输出
{"level":"debug","msg":"这是一条DEBUG信息"}
{"level":"info","msg":"这是一条INFO信息"}</code>
Nach dem Login kopieren
Nach dem Login kopieren

Die Konsole zeigt die Farbe auf der Ebene

Geben Sie einfach die

des Encoders an.

EncodeLevel

Dateipfad und Zeilennummer
<code>// Development 输出
2025-01-28T00:00:00.000+0800    DEBUG    development/main.go:7    这是一条DEBUG信息
2025-01-28T00:00:00.000+0800    INFO    development/main.go:8    这是一条INFO信息</code>
Nach dem Login kopieren
Nach dem Login kopieren
Anzeigedateianzeige

Wie bereits erwähnt, um die Dateipfad und die Zeilennummer anzuzeigen, fügen Sie einfach Parameter

zur

-Methode hinzu. Wenn Sie den vollständigen Pfad anzeigen möchten, müssen Sie in der Encoder -Konfiguration angeben. zap.New zap.AddCaller()

Voller Code
<code>// Production 输出
{"level":"info","ts":1737907200.0000000,"caller":"production/main.go:8","msg":"这是一条INFO信息"}
{"level":"info","ts":1737907200.0000000,"caller":"production/main.go:9","msg":"这是一条包含字段的INFO信息","region":["us-west"],"id":2}</code>
Nach dem Login kopieren
Nach dem Login kopieren

lapcell: Beste Golang -Anwendungshosting, asynchrone Aufgabe und Redis -Plattform

<code class="language-go">var sugarLogger *zap.SugaredLogger

func InitLogger() {
  logger, _ := zap.NewProduction()
    sugarLogger = logger.Sugar()
}

func main() {
    InitLogger()
    defer sugarLogger.Sync()
    sugarLogger.Errorf("获取URL %s 失败:错误 = %s", url, err)
}</code>
Nach dem Login kopieren
Nach dem Login kopieren

Empfehlen Sie schließlich eine beste Plattform für die Bereitstellung von Golang -Diensten: Leapcell

Zap: Unlock the Full Potential of Logging in Go 1. Multi -Sprunguage Support

Verwenden Sie JavaScript, Python, Go oder Rost for Development.

    2.. Unbegrenzte Projekte kostenlos
  • einsetzen

Zahlen Sie nur für die Verwendung -NO -Anfrage, keine Kosten.

  • 3. beispiellose Kostenvorteile

Auf Anfrage bezahlen, keine Leerlaufkosten.

    zum Beispiel: 25 USD unterstützt 6,94 Millionen Anfragen mit einer durchschnittlichen Reaktionszeit von 60 Millisekunden.
  • 4. vereinfachte Entwicklererfahrung

intuitive Benutzeroberfläche, einfache Einstellungen.

    Vollautomatische CI/CD -Pipeline und Gitops -Integration.
  • Real -Time -Indikatoren und Protokolldatensätze bieten operative Erkenntnisse.
  • 5. Einfache Expansion und Hochleistung

Automatische Erweiterung, um leicht hoch und fusioniert zu handhaben.

    Null Betriebskosten -Fokus nur auf den Bau.
Weitere Informationen im Dokument finden Sie!

Zap: Unlock the Full Potential of Logging in Go lapcell twitter:

https://www.php.cn/link/7884effb9452a6d7a7949ef854afd

Diese Revisionsausgabe behält die ursprüngliche Bedeutung und die Bildplatzierung bei und verändert die Ausgabe erheblich

Das obige ist der detaillierte Inhalt vonZAP: Entsperren Sie das volle Potenzial der Anmeldung in Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage