首頁 > 後端開發 > Golang > 如何使用 Uber Go Zap 函式庫將不同等級的日誌分離到 stdout 和 stderr?

如何使用 Uber Go Zap 函式庫將不同等級的日誌分離到 stdout 和 stderr?

Linda Hamilton
發布: 2024-10-25 17:25:17
原創
183 人瀏覽過

How can you use Uber Go Zap library to separate logs of different levels to stdout and stderr?

使用uber-go/zap 根據日誌級別記錄到stdout 和stderr

簡介

uber-go/zap 函式庫提供了強大的日誌記錄功能。為了滿足特定要求,將不同等級的日誌導向到不同的目的地(例如 stdout 和 stderr)可能會很有幫助。本文探討如何實現這種分離,確保日誌根據其嚴重性寫入適當的設備。

自訂日誌記錄配置

在 uber 中指定自訂日誌記錄行為-go/zap,我們可以利用 zap.Config 結構。透過修改OutputPaths和ErrorOutputPaths字段,我們可以控制不同日誌等級的目的地。但是,如果在 OutputPaths 或 ErrorOutputPaths 中僅設定一個路徑,則所有日誌都會寫入到該單一目標,無論其等級為何。

解決方案:Zapcore.NewTee

為了實現所需的分離,我們使用 zapcore.NewTee,它創建了一個組合多個核心的 Tee 核心。每個核心可以獨立處理特定層級的日誌,並將其定向到各自的目的地。以下是我們實作此解決方案的方法:

<code class="go">import (
    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
    "os"
)

func main() {
    stdoutSyncer := zapcore.Lock(os.Stdout)
    stderrSyncer := zapcore.Lock(os.Stderr)

    infoCore := zapcore.NewCore(
        zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
        stdoutSyncer,
        zap.InfoLevel,
    )

    errorCore := zapcore.NewCore(
        zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
        stderrSyncer,
        zap.ErrorLevel,
    )

    core := zapcore.NewTee(infoCore, errorCore)
    logger := zap.New(core)

    logger.Info("info log")
    logger.Error("error log")
}</code>
登入後複製

在此範例中,我們建立兩個核心:一個用於資訊級日誌(寫入到stdout),另一個用於錯誤層級日誌(寫入到stderr)。 zapcore.NewTee函數結合了這些核心,允許不同層級的日誌被導向到不同的目的地。

透過將stdout或stderr重定向到/dev/null,我們可以進一步驗證每個日誌訊息確實寫入正確的設備,取決於其等級。

以上是如何使用 Uber Go Zap 函式庫將不同等級的日誌分離到 stdout 和 stderr?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板