如何使用uber-go/zap 依照日誌等級將日誌輸出到stdout 和stderr
依照嚴重性等級分離日誌uber-go /zap,利用「tee-ing」zapcore 核心的概念。此方法利用結合了兩個獨立核心的 Tee 核心,每個核心都有特定的等級啟用器。
實作:
定義等級啟用器:
<code class="go">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 })</code>
設定寫入同步器:
<code class="go">stdoutSyncer := zapcore.Lock(os.Stdout) stderrSyncer := zapcore.Lock(os.Stderr)</code>
建構Tee Core:
<code class="go">core := zapcore.NewTee( zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stdoutSyncer, infoLevel, ), zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stderrSyncer, errorFatalLevel, ), )</code>
建立記錄器:
<code class="go">logger := zap.New(core)</code>
示範:
<code class="go">logger.Info("info log") logger.Error("error log")</code>
測試:
重定向標準輸出或stderr 重新導向/dev/null 以驗證訊息日誌到stdout,錯誤日誌是否印到stderr:
$ go build main.go $ ./main 2>/dev/null # displays only stdout logs {"level":"info","ts":1626900981.520349,"msg":"info log"} $ ./main 1>/dev/null # displays only stderr logs {"level":"error","ts":1626901025.056065,"msg":"error log"}
以上是如何使用 uber-go/zap 按嚴重等級分離日誌?的詳細內容。更多資訊請關注PHP中文網其他相關文章!