首頁 > 後端開發 > Golang > 如何使用 Uber-Go/Zap 將訊息日誌分離到 STDOUT 並將錯誤/致命日誌分離到 STDERR?

如何使用 Uber-Go/Zap 將訊息日誌分離到 STDOUT 並將錯誤/致命日誌分離到 STDERR?

DDD
發布: 2024-10-25 08:52:29
原創
328 人瀏覽過

How to Separate Info Logs to STDOUT and Error/Fatal Logs to STDERR Using Uber-Go/Zap?

如何使用 Uber-Go/Zap 根據日誌等級記錄到 STDOUT 和 STDERR?

Zap,一個流行的 Go 日誌庫,可讓您根據日誌訊息的層級控制日誌訊息的寫入位置。以下是如何配置Zap 進行寫入:

  • 信息日誌記錄到STDOUT
  • 錯誤和致命日誌記錄到STDERR

將ZapCore.NewTee 與單獨的核心結合使用:

要實現這種分離,請建立一個結合兩個核心的Tee 核心:

  • 一個專用核心到InfoLevel,寫入STDOUT。
  • 另一個專用於 ErrorLevel 和 FatalLevel 的核心,寫入 STDERR。

這是示範此技術的範例程式:

<code class="go">package main

import (
    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
    "os"
)

func main() {
    // 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
    })

    // Write syncers
    stdoutSyncer := zapcore.Lock(os.Stdout)
    stderrSyncer := zapcore.Lock(os.Stderr)

    // Tee core for InfoLevel and ErrorLevel/FatalLevel separation
    core := zapcore.NewTee(
        zapcore.NewCore(
            zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
            stdoutSyncer,
            infoLevel,
        ),
        zapcore.NewCore(
            zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
            stderrSyncer,
            errorFatalLevel,
        ),
    )

    // Create logger with tee core
    logger := zap.New(core)

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

在此範例中,程式將訊息訊息記錄到 STDOUT,將錯誤訊息記錄到 STDERR。您可以透過將對應的輸出重新導向到 /dev/null 來驗證這一點:

<code class="bash"># stdout only
$ go build main.go && ./main 2>/dev/null
{
  "level": "info",
  "ts": <timestamp>,
  "msg": "Info log"
}

# stderr only
$ go build main.go && ./main 1>/dev/null
{
  "level": "error",
  "ts": <timestamp>,
  "msg": "Error log"
}</code>
登入後複製

以上是如何使用 Uber-Go/Zap 將訊息日誌分離到 STDOUT 並將錯誤/致命日誌分離到 STDERR?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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