首頁 >後端開發 >Golang >如何使用 uber-go/zap 將訊息日誌傳送到 stdout 並將錯誤/致命日誌傳送到 stderr?

如何使用 uber-go/zap 將訊息日誌傳送到 stdout 並將錯誤/致命日誌傳送到 stderr?

Barbara Streisand
Barbara Streisand原創
2024-10-26 11:45:291009瀏覽

How to Send Info Logs to stdout and Error/Fatal Logs to stderr Using uber-go/zap?

如何使用 uber-go/zap 依照日誌等級記錄到 stdout 或 stderr?

問題:

設定 uber-go/zap 將訊息日誌寫入 stdout,將錯誤和致命日誌寫入 stderr。

答案:

要實現此目的,使用具有兩個內核的zapcore.NewTee,每個內核集處理特定的日誌等級:

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

func main() {
    // Create a level enabler for info logs
    infoLevel := zap.LevelEnablerFunc(func(level zapcore.Level) bool {
        return level == zapcore.InfoLevel
    })

    // Create a level enabler for error and fatal logs
    errorFatalLevel := zap.LevelEnablerFunc(func(level zapcore.Level) bool {
        return level == zapcore.ErrorLevel || level == zapcore.FatalLevel
    })

    // Create stdout and stderr writers
    stdoutSyncer := zapcore.Lock(os.Stdout)
    stderrSyncer := zapcore.Lock(os.Stderr)

    // Create a tee core that writes to both stdout and stderr
    core := zapcore.NewTee(
        // Core for info logs
        zapcore.NewCore(
            zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
            stdoutSyncer,
            infoLevel,
        ),
        // Core for error and fatal logs
        zapcore.NewCore(
            zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
            stderrSyncer,
            errorFatalLevel,
        ),
    )

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

    // Log info and error messages
    logger.Info("info log")
    logger.Error("error log")
}</code>

此配置可讓您控制不同日誌等級的寫入位置,為您的日誌記錄策略提供更大的靈活性。

以上是如何使用 uber-go/zap 將訊息日誌傳送到 stdout 並將錯誤/致命日誌傳送到 stderr?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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