ホームページ  >  記事  >  バックエンド開発  >  golangのエラーログ収集

golangのエラーログ収集

WBOY
WBOYオリジナル
2023-05-10 11:39:36609ブラウズ

エラー処理は、golang アプリケーションを開発する場合に特に重要です。エラー ログの収集は、プログラムの問題を時間内に発見するのに役立ち、エラーのトラブルシューティングの手順を迅速化することもできるため、非常に重要なリンクです。ここではgolangでエラーログを収集する方法を紹介します。

1. ログ ライブラリを使用してエラー ログを記録します

Golang の組み込みログ ライブラリは、ほとんどの印刷ニーズを満たすことができるシンプルで強力なログ機能を提供します。ログ ライブラリを通じて、コンソール、ファイル、またはその他のさまざまな場所に情報を出力できます。同時に、ログ ライブラリはさまざまなレベルのログの記録もサポートします。

ログ ライブラリの使用は非常に簡単です。ログ ライブラリをインポートし、コード内で Println() または Fatal() 関数を呼び出すだけです。例:

import "log"

log.Println("This is a log message")
log.Fatalf("This is a fatal error message")

Println() 関数を使用して、情報をコンソールと標準出力に出力します。 Fatal()関数を使用してエラー情報を出力し、プログラムを終了します。

2. サードパーティのログ ライブラリを使用する

Golang の組み込みログ ライブラリを使用することに加えて、いくつかの高度なサードパーティ ログ ライブラリを使用することもできます。 logrus、zap、zerolog などのこれらのライブラリは、カスタマイズされたロギングをより柔軟に実装でき、さまざまなプロジェクトのロギング要件をより適切に満たすこともできます。

1. logrus を使用する

logrus は、効率的なロギングを実現し、複数のログ形式をサポートする構造化ロギング ライブラリです。 logrus を使用すると、JSON 形式を簡単にエクスポートしてリモート システムまたは他のサードパーティ ロガーにログを送信できるほか、ログ レベルと形式もカスタマイズできます。 Logrus は非常に使いやすく、logrus パッケージをインポートしてログ オブジェクトをインスタンス化するだけで済みます。例:

import (
  "github.com/sirupsen/logrus"
)

log := logrus.New()
log.SetFormatter(&logrus.JSONFormatter{})
log.SetLevel(logrus.DebugLevel)
log.WithFields(logrus.Fields{
  "animal": "walrus",
}).Info("A walrus appears")

2. zap の使用

zap は、高いパフォーマンスを実現するように設計された高速で構造化されたログ ライブラリであり、運用環境に柔軟に導入できます。 zap では、ログ記録は指定された出力ソース (ファイルや MongoDB など) へのログ記録を含むタスクとして扱われ、ログ レベルと形式もカスタマイズできます。 zap を使用すると、アプリケーションのアクティビティを効果的に記録できるため、トラブルシューティングが必要なときに問題を簡単に見つけて特定できます。例:

package main

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

func main() {
    logger, _ := zap.NewProduction()
    defer logger.Sync()
    logger.Info("logrus-start")
}

3. 分散トレーシング システムを使用する

大規模な分散システムでは、ログ ライブラリを使用してエラー ログを記録することはニーズを満たさない場合があります。エラー ログの数は膨大であり、手動によるスクリーニングが必要なため、多くの場合、これは非常に面倒で時間がかかります。この場合、Jaeger、Zipkin、SkyWalking などの分散トレーシング システムの使用を検討できます。これらのシステムは、分散システムのリクエストの方向とエラー情報を追跡するのに役立ちます。

これらのシステムを使用する利点は、分散システムでのリクエストの追跡と記録に役立ち、リクエストの透過的な分析が可能になることです。問題が発生した場合、これらのシステムは障害を適時に検出し、トラブルシューティングに役立ちます。

分散型追跡システムを使用する場合、対応する追跡コードをアプリケーションに追加する必要があります。たとえば、Jaeger を使用する場合、次のコードをプログラムに追加する必要があります。

package main

import (
    "net/http"

    "github.com/opentracing/opentracing-go"
    "github.com/uber/jaeger-client-go"
    "github.com/uber/jaeger-client-go/config"
)

func main() {
    cfg := &config.Configuration{
        Sampler: &config.SamplerConfig{
            Type:  "const",
            Param: 1,
        },
        Reporter: &config.ReporterConfig{
            LogSpans:            true,
            LocalAgentHostPort:  "127.0.0.1:6831",
            BufferFlushInterval: 1 * time.Second,
        },
    }
    tracer, closer, err := cfg.New(
        "my-golang-app",
        config.Logger(jaeger.StdLogger),
    )
    if err != nil {
        log.Fatalf("Failed to create tracer: %v", err)
    }
    defer closer.Close()
    opentracing.SetGlobalTracer(tracer)
    r := http.NewServeMux()
    r.HandleFunc("/", handler)
    http.ListenAndServe(":8080", r)
}

上記のコードでは、Jaeger 分散トレーシング システムを使用して Golang アプリケーションを追跡します。この構成では、サンプラーを 1 に設定し、ログのレポートを確認します。ローカル エージェントが使用するアドレスは「127.0.0.1:6831」、バッファーの更新時間は 1 秒です。その後、グローバル トラッカーを定義し、opentracing のグローバル トラッカーとして設定しました。

4. 概要

Golang の開発プロセスにおいて、エラー ログの収集は不可欠な部分です。 Golang の標準ライブラリはシンプルで強力なログ ライブラリを提供し、サードパーティのログ ライブラリはより柔軟なカスタマイズ機能を提供します。特に大規模な分散システムでは、分散トレース システムを使用すると、エラー ログの収集とトラブルシューティングを効率的に行うことができます。ログ ライブラリを使用する場合、特定のプロジェクト要件とアプリケーション シナリオに基づいて適切なログ ライブラリを選択し、問題をより適切に特定して解決できるように重要なログ情報の収集に注意を払う必要があります。

以上がgolangのエラーログ収集の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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