ホームページ  >  記事  >  バックエンド開発  >  Go でカスタム ログを使用するにはどうすればよいですか?

Go でカスタム ログを使用するにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-05-11 16:58:51929ブラウズ

Go では、ログ記録は非常に重要な側面です。アプリケーションを開発するときは、必要に応じて調査やトラブルシューティングができるように、アプリケーションの動作を 1 か所に記録する必要があります。標準ライブラリのログ パッケージは、いくつかの基本的なログ機能を提供しますが、実際のアプリケーションでは、より複雑で高度なログ ツールが必要になる場合があります。ここでカスタム ログが役に立ちます。

この記事では、Go でカスタム ログを使用する方法を学びます。

  1. カスタム ロガーの作成

標準ライブラリのログ パッケージはすでに基本的なログのニーズを満たすことができますが、ログ パッケージには制限があることに注意してください。より低いレベルのよりカスタマイズされたコントロールが必要になる場合があります。したがって、サードパーティ パッケージ「zap」を使用してカスタム ロガーを作成します。

zap を使用するには、最初にそれをインストールする必要があります。これは次のコマンドで実行できます:

go get -u go.uber.org/zap

インストールが完了したら、基本的なロガーを作成できます:

package main

import "go.uber.org/zap"

func main() {
    logger, err := zap.NewProduction()
    if err != nil {
        panic(err)
    }

    logger.Info("Hello, world!")
}

上記のサンプル コードでは、NewProduction() 関数を使用して運用レベルのロガーを作成します。

もちろん、これだけではニーズを満たすのに十分ではありません。独自のロガーを定義する必要があります。 zap.NewDevelopment() または zap.NewProduction() を使用して汎用ロガーを作成できますが、複雑なアプリケーションの場合はカスタム ロガーの作成が必要になる場合があります。

次のコード例では、「myLogger」という名前のカスタム ロガーを定義します。

package main

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

func main() {
    cfg := zap.Config{
        Encoding:         "console",
        Level:            zap.NewAtomicLevelAt(zapcore.DebugLevel),
        OutputPaths:      []string{"stdout"},
        ErrorOutputPaths: []string{"stderr"},
        EncoderConfig: zapcore.EncoderConfig{
            TimeKey:        "timestamp",
            MessageKey:     "message",
            CallerKey:      "caller",
            EncodeTime:     zapcore.ISO8601TimeEncoder,
            EncodeDuration: zapcore.StringDurationEncoder,
            EncodeCaller:   zapcore.ShortCallerEncoder,
        },
    }

    logger, err := cfg.Build()
    if err != nil {
        panic(err)
    }

    logger.Debug("Debug message")
    logger.Info("Info message")
    logger.Warn("Warn message")
    logger.Error("Error message")
}

上の例では、最初に「cfg」という名前のカスタム ロガー構成構造を定義します。設定構造には、出力形式、ログ レベル、出力場所など、ロガーに必要なすべてのパラメータが含まれています。

次に、 cfg.Build() 関数を使用してロガーを作成します。これにより、ログ メッセージの印刷に使用できるカスタム設定を備えたロガーが得られます。上の例では、さまざまなレベルのログ メッセージを出力しました。

  1. コンテキスト情報の追加

カスタム ロガーの重要な機能は、コンテキスト情報を追加する機能です。コンテキスト情報を追加すると、何が起こったのかをより深く理解し、問題を迅速に特定できます。

次の例では、logger.With() 関数を使用して、「user_id」という名前のコンテキスト フィールドを追加します。

package main

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

func main() {
    cfg := zap.Config{
        Encoding:         "console",
        Level:            zap.NewAtomicLevelAt(zapcore.DebugLevel),
        OutputPaths:      []string{"stdout"},
        ErrorOutputPaths: []string{"stderr"},
        EncoderConfig: zapcore.EncoderConfig{
            TimeKey:        "timestamp",
            MessageKey:     "message",
            CallerKey:      "caller",
            EncodeTime:     zapcore.ISO8601TimeEncoder,
            EncodeDuration: zapcore.StringDurationEncoder,
            EncodeCaller:   zapcore.ShortCallerEncoder,
        },
    }

    logger, err := cfg.Build()
    if err != nil {
        panic(err)
    }

    userId := "user123"
    logger = logger.With(zap.String("user_id", userId))

    logger.Info("Info message")
}

上の例では、logger.With() を使用します。関数は新しいロガーを作成します。これには、値「user123」を持つ「user_id」というコンテキスト フィールドが含まれます。

これは、どのユーザーがシステムを使用しているかを簡単に把握し、ユーザー関連の問題のトラブルシューティングを行うことができるため、実際のアプリケーションで非常に役立ちます。

  1. ファイルへのログ記録

デフォルトでは、カスタム ロガーはメッセージを stdout に記録します。ただし、実際のアプリケーションでは、ログの管理と展開を容易にするために、ログ メッセージをファイルに記録する必要があります。

zap ロガーは、ファイル、stdout、stderr などの複数の出力タイプを提供します。アプリケーションに応じて、出力のタイプを選択できます。

次の例では、ファイルにログを記録しています:

package main

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

func main() {
    cfg := zap.Config{
        Encoding:         "console",
        Level:            zap.NewAtomicLevelAt(zapcore.DebugLevel),
        OutputPaths:      []string{"myapp.log"},
        ErrorOutputPaths: []string{"myapp.log"},
        EncoderConfig: zapcore.EncoderConfig{
            TimeKey:        "timestamp",
            MessageKey:     "message",
            CallerKey:      "caller",
            EncodeTime:     zapcore.ISO8601TimeEncoder,
            EncodeDuration: zapcore.StringDurationEncoder,
            EncodeCaller:   zapcore.ShortCallerEncoder,
        },
    }

    logger, err := cfg.Build()
    if err != nil {
        panic(err)
    }

    logger.Info("Testing log file...")
}

上の例では、OutputPaths フィールドと ErrorOutputPaths フィールドにファイル パスを指定しています。これにより、ロガーはログを書き込みます。メッセージを myapp.log ファイルに送信します。

要約すると、カスタム ロガーは、実際のアプリケーションのニーズを満たすことができるように、より高い柔軟性とカスタマイズ機能を提供します。カスタム ロガーを使用すると、特定の情報を簡単に記録でき、必要に応じてログ データの処理と分析が容易になります。

以上がGo でカスタム ログを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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