Uber Go Zap ライブラリを使用して、さまざまなレベルのログを stdout と stderr に分離するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-25 17:25:17
オリジナル
110 人が閲覧しました

How can you use Uber Go Zap library to separate logs of different levels to stdout and stderr?

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

概要

uber-go/zap ライブラリは、堅牢なロギング機能を提供します。特定の要件を満たすには、さまざまなレベルのログを stdout や stderr などの別々の宛先に送信すると有益な場合があります。この記事では、この分離を実現し、重大度に基づいて適切なデバイスにログが書き込まれるようにする方法について説明します。

カスタム ログ構成

uber でカスタム ログ動作を指定するには-go/zap では、zap.Config 構造体を利用できます。 OutputPaths フィールドと ErrorOutputPaths フィールドを変更することで、さまざまなログ レベルの宛先を制御できます。ただし、OutputPaths または ErrorOutputPaths にパスが 1 つだけ設定されている場合は、レベルに関係なく、すべてのログがその 1 つの宛先に書き込まれます。

解決策: Zapcore.NewTee

望ましい分離を実現するために、複数のコアを組み合わせた T コアを作成する zapcore.NewTee を採用しています。各コアは、特定のレベルのログを個別に処理し、それぞれの宛先に送信できます。このソリューションの実装方法は次のとおりです。

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

func main() {
    stdoutSyncer := zapcore.Lock(os.Stdout)
    stderrSyncer := zapcore.Lock(os.Stderr)

    infoCore := zapcore.NewCore(
        zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
        stdoutSyncer,
        zap.InfoLevel,
    )

    errorCore := zapcore.NewCore(
        zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
        stderrSyncer,
        zap.ErrorLevel,
    )

    core := zapcore.NewTee(infoCore, errorCore)
    logger := zap.New(core)

    logger.Info("info log")
    logger.Error("error log")
}</code>
ログイン後にコピー

この例では、2 つのコアを作成します。1 つは情報レベルのログ (stdout に書き込まれる) 用で、もう 1 つはエラーレベルのログ (stderr に書き込まれる) 用です。 zapcore.NewTee 関数はこれらのコアを結合し、異なるレベルのログを別々の宛先に送信できるようにします。

stdout または stderr を /dev/null にリダイレクトすることで、各ログ メッセージが実際に書き込まれているかどうかをさらに検証できます。レベルに応じて、適切なデバイスを選択します。

以上がUber Go Zap ライブラリを使用して、さまざまなレベルのログを stdout と stderr に分離するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!