ホームページ > バックエンド開発 > Golang > Uber-Go/Zap を使用して情報ログを STDOUT に、エラー/致命的ログを STDERR に分離するにはどうすればよいですか?

Uber-Go/Zap を使用して情報ログを STDOUT に、エラー/致命的ログを STDERR に分離するにはどうすればよいですか?

DDD
リリース: 2024-10-25 08:52:29
オリジナル
323 人が閲覧しました

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

Uber-Go/Zap を使用してログ レベルに基づいて STDOUT および STDERR にログを記録する方法?

人気の Go ログ ライブラリである Zap、ログ メッセージをレベルに基づいて書き込む場所を制御できます。

  • 情報ログを STDOUT に書き込む
  • エラーと致命的なログを STDERR に書き込むように Zap を設定する方法は次のとおりです。

個別のコアで ZapCore.NewTee を使用する:

この分離を実現するには、2 つのコアを組み合わせた T コアを作成します:

  • 1 つのコア専用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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート