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
Beispiel Erstellung
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>
<code>// Example 输出 {"level":"debug","msg":"这是一条DEBUG信息"} {"level":"info","msg":"这是一条INFO信息"}</code>
<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>
<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>
Example
Production
Development
*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>
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>
<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>
<code class="language-go">// 代码示例 var log *zap.Logger log = zap.NewExample() log, _ := zap.NewDevelopment() log, _ := zap.NewProduction() log.Debug("这是一条DEBUG信息") log.Info("这是一条INFO信息")</code>
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
<code>// Example 输出 {"level":"debug","msg":"这是一条DEBUG信息"} {"level":"info","msg":"这是一条INFO信息"}</code>
Die Konsole zeigt die Farbe auf der Ebene
EncodeLevel
<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>
-Methode hinzu. Wenn Sie den vollständigen Pfad anzeigen möchten, müssen Sie in der Encoder -Konfiguration angeben. zap.New
zap.AddCaller()
<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>
<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>
1. Multi -Sprunguage Support
Verwenden Sie JavaScript, Python, Go oder Rost for Development.
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!