ホームページ >バックエンド開発 >Golang >uber-go/zap を使用してログをレベルごとに標準出力と標準エラー出力に分ける方法は?

uber-go/zap を使用してログをレベルごとに標準出力と標準エラー出力に分ける方法は?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-26 08:06:02902ブラウズ

How to Separate Logs by Level to Stdout and Stderr using uber-go/zap?

uber-go/zap を使用した stdout と stderr へのログ記録

uber-go を使用した異なるログ レベルのログ記録の stdout と stderr への分離/zap は、T コアを採用することで実現できます。 T コアは複数のコアを結合し、レベルに基づいてログを異なる宛先に書き込むことができます。

T コアの作成方法

T コアを作成するには、 2 つの個別のコアを構築する必要があります。1 つは標準出力用、もう 1 つは標準エラー出力用です。各コアには、ログ メッセージをフォーマットするためのエンコーダーと、適切なデバイスにログを書き込むためのシンサーが含まれています。

サンプル ティー コア

次のスニペットは、情報ログを stdout に、エラー/致命的ログを stderr に分離する t コア:

<code class="go">package main

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

func main() {
    // Syncers for stdout and stderr
    stdoutSyncer := zapcore.Lock(os.Stdout)
    stderrSyncer := zapcore.Lock(os.Stderr)

    // Create two 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
        },
    )

    // Create two cores
    infoCore := zapcore.NewCore(
        zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
        stdoutSyncer,
        infoLevel,
    )

    errorFatalCore := zapcore.NewCore(
        zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
        stderrSyncer,
        errorFatalLevel,
    )

    // Combine the cores into a tee core
    teeCore := zapcore.NewTee(
        infoCore,
        errorFatalCore,
    )

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

    // Log messages at different levels
    logger.Info("Info log")
    logger.Error("Error log")
}</code>

出力リダイレクト

ログ出力の分離を確認するには、次のようにします。 stdout または stderr を /dev/null にリダイレクトし、残りの出力を観察します。

<code class="bash">$ go build main.go

$ ./main 2>/dev/null # Shows only stdout
{
    "level": "info",
    "ts": 1626900981.520349,
    "msg": "info log"
}

$ ./main 1>/dev/null # Shows only stderr
{
    "level": "error",
   "ts": 1626901025.056065,
    "msg": "error log"
}</code>

以上がuber-go/zap を使用してログをレベルごとに標準出力と標準エラー出力に分ける方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。