首頁 >後端開發 >Golang >如何使用 uber-go/zap 按嚴重等級分離日誌?

如何使用 uber-go/zap 按嚴重等級分離日誌?

Susan Sarandon
Susan Sarandon原創
2024-10-25 08:59:29663瀏覽

How to Separate Logs by Severity Level Using uber-go/zap?

如何使用uber-go/zap 依照日誌等級將日誌輸出到stdout 和stderr

依照嚴重性等級分離日誌uber-go /zap,利用「tee-ing」zapcore 核心的概念。此方法利用結合了兩個獨立核心的 Tee 核心,每個核心都有特定的等級啟用器。

實作:

  1. 定義等級啟用器:

    <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>
  2. 設定寫入同步器:

    <code class="go">stdoutSyncer := zapcore.Lock(os.Stdout)
    stderrSyncer := zapcore.Lock(os.Stderr)</code>
  3. 建構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>
  4. 建立記錄器:

    <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
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:1626900981.520349,&quot;msg&quot;:&quot;info log&quot;}

$ ./main 1>/dev/null # displays only stderr logs
{&quot;level&quot;:&quot;error&quot;,&quot;ts&quot;:1626901025.056065,&quot;msg&quot;:&quot;error log&quot;}

以上是如何使用 uber-go/zap 按嚴重等級分離日誌?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn