ホームページ  >  記事  >  バックエンド開発  >  uber-go/zap を使用してログを重大度ごとに分ける方法は?

uber-go/zap を使用してログを重大度ごとに分ける方法は?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-25 08:59:29554ブラウズ

How to Separate Logs by Severity Level Using uber-go/zap?

uber-go/zap を使用してログ レベルに基づいて stdout および stderr にログを出力する方法

重大度レベルに基づいてログを分割するにはuber-go/zap では、zapcore コアの「ティーイング」の概念を利用します。このアプローチでは、それぞれが特定のレベル イネーブラーを持つ 2 つの独立したコアを組み合わせた T コアを活用します。

実装:

  1. レベル イネーブラーの定義:

    <code class="go">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
    })</code>
  2. 書き込みシンクロのセットアップ:

    <code class="go">stdoutSyncer := zapcore.Lock(os.Stdout)
    stderrSyncer := zapcore.Lock(os.Stderr)</code>
  3. T コアの構築:

    <code class="go">core := zapcore.NewTee(
     zapcore.NewCore(
         zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
         stdoutSyncer,
         infoLevel,
     ),
     zapcore.NewCore(
         zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
         stderrSyncer,
         errorFatalLevel,
     ),
    )</code>
  4. ロガーの作成:

    <code class="go">logger := zap.New(core)</code>

デモ:

<code class="go">logger.Info("info log")
logger.Error("error log")</code>

テスト:
標準出力をリダイレクトまたは、stderr を /dev/null に実行して、情報ログが stdout に出力され、エラー ログが stderr:

$ go build main.go

$ ./main 2>/dev/null # displays only stdout logs
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:1626900981.520349,&quot;msg&quot;:&quot;info log&quot;}

$ ./main 1>/dev/null # displays only stderr logs
{&quot;level&quot;:&quot;error&quot;,&quot;ts&quot;:1626901025.056065,&quot;msg&quot;:&quot;error log&quot;}
に出力されることを確認します。

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

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