使用uber-go/zap 記錄到stdout 和stderr
使用uber-go 將不同日誌等級的日誌記錄分開到stdout 和stderr /zap 可以透過使用T 形核心來實現。 Tee 核心結合了多個核心,允許根據等級將日誌寫入不同的目的地。
如何建立 Tee 核心
要建立 Tee 核心,您需要建立兩個單獨的核心:一個用於標準輸出,另一個用於標準錯誤。每個核心都包含一個用於格式化日誌訊息的編碼器和一個用於將日誌寫入適當裝置的同步器。
Tee 核心範例
以下程式碼片段示範如何建立將資訊日誌分離到stdout 並將錯誤/致命日誌分離到stderr 的tee 核心:
<code class="go">package main import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" ) func main() { // Syncers for stdout and stderr stdoutSyncer := zapcore.Lock(os.Stdout) stderrSyncer := zapcore.Lock(os.Stderr) // Create two level enablers infoLevel := zap.LevelEnablerFunc( func(level zapcore.Level) bool { return level == zapcore.InfoLevel }, ) errorFatalLevel := zap.LevelEnablerFunc( func(level zapcore.Level) bool { return level == zapcore.ErrorLevel || level == zapcore.FatalLevel }, ) // Create two cores infoCore := zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stdoutSyncer, infoLevel, ) errorFatalCore := zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stderrSyncer, errorFatalLevel, ) // Combine the cores into a tee core teeCore := zapcore.NewTee( infoCore, errorFatalCore, ) // Create a logger with the tee core logger := zap.New( teeCore, ) // Log messages at different levels logger.Info("Info log") logger.Error("Error log") }</code>
輸出重定向
要驗證日誌輸出的分離,您可以將stdout 或stderr 重新導向到/dev/null 並觀察剩餘的輸出。
<code class="bash">$ go build main.go $ ./main 2>/dev/null # Shows only stdout { "level": "info", "ts": 1626900981.520349, "msg": "info log" } $ ./main 1>/dev/null # Shows only stderr { "level": "error", "ts": 1626901025.056065, "msg": "error log" }</code>
以上是如何使用 uber-go/zap 按等級將日誌分離到 Stdout 和 Stderr?的詳細內容。更多資訊請關注PHP中文網其他相關文章!