ソフトウェア システムの規模が拡大し続けるにつれ、ロギング メカニズムはシステム開発においてますます重要な部分を占めており、ソフトウェアの動作中に詳細な情報を記録することで、開発者はコードの実行状況をより深く理解できるようになります。問題を時間内に検出して解決するため。 Go 言語は、強力で効率的なプログラミング言語として、開発者をサポートする優れたロギング ライブラリも多数提供します。
この記事では、Go 言語でよく使われるロギング ライブラリをいくつか紹介し、その使い方や特徴を簡単に紹介しますので、ロギング作業の一助になれば幸いです。
#ログ パッケージ-
Go 言語に付属のログ パッケージは、シンプルですがフル機能のログ ライブラリであり、次の利点があります:
基本的なログ印刷機能をサポートし、Println、Printf、Print 関数を提供します; - ログ出力のプレフィックス、ログ情報の出力場所、その他のオプションを指定できます;
- 出力を制御できますログ レベルの詳細レベルを設定します。
-
ログは、ログ パッケージ内の関数を呼び出すことで簡単に実行できます。例:
log.Println("This is a log message.")
ログイン後にコピー
出力結果は次のようになります:
2021/11/11 12:34:56 This is a log message.
ログイン後にコピー
このうち、出力情報の前にある時刻は自動生成され、ログが記録された時刻を表します。
zap
zap は、Uber によって開発された高性能ログ ライブラリです。その主な機能は次のとおりです:
非常に高速で、また高同時実行環境をサポート; ログ レベル、出力形式、その他のオプションを構成できます; コンソール、ファイル、ネットワークなどのさまざまなログ出力方法を提供します; ログ フィールドは、大量のデータのインデックス作成とクエリを容易にするために柔軟にカスタマイズできます。
zap ログ ライブラリは、ログ パッケージと比較して、出力速度が速く、カスタマイズ性が高く、機能が豊富です。次に、zap を使用してログを出力する簡単な例を示します。
package main
import (
"go.uber.org/zap"
)
func main() {
logger, err := zap.NewProduction()
if err != nil {
panic(err)
}
defer logger.Sync()
logger.Info("This is a log message.", zap.String("key", "value"))
}
ログイン後にコピー
この例では、zap ロガーが作成され、Info 関数を使用してログに情報が追加されます。 2 番目のパラメーター zap.String("key", "value") は、key という名前のフィールドを指定し、その値を value に設定します。出力結果は次のようになります。
{"level":"info","ts":1636634174.8175042,"caller":"main.go:9","msg":"This is a log message.","key":"value"}
ログイン後にコピー
出力ログ情報には、ログ レベル、出力タイムスタンプ、プログラム実行コンテキストなどの複数の情報フィールドが含まれていることがわかります。
lumberjack
lumberjack は、開発者がログ ファイルを書き込むときにファイル サイズをローテーションして制限するのに役立つシンプルなログ ローテーション ライブラリです。ログをファイルに直接出力する場合と比較して、ランバージャックの使用には複数の利点があります:
ログ ファイルのサイズを自動的に制限して、システム動作に影響を与える大きすぎるファイルを避けることができます。ファイルを時間やその他の方法に従って定期的にローテーションして、将来の履歴ログ情報のレビューを容易にすることができます。 は、マルチスレッド環境におけるログ ファイルの競合の問題を回避できます。 - 次は、ログ ローテーションに木こりを使用する例です:
package main
import (
"github.com/natefinch/lumberjack"
"log"
)
func main() {
logger := &lumberjack.Logger{
Filename: "/var/log/myapp.log",
MaxSize: 10, // megabytes
MaxBackups: 3,
MaxAge: 28, //days
}
defer logger.Close()
log.SetOutput(logger)
log.Println("This is a log message.")
}
ログイン後にコピー
この例では、ログの記録にロガー インスタンスが使用され、ログ ファイルのパスとファイルが記録されます。 Name、MaxSize、MaxBackups、MaxAge は、ログ ファイルのサイズ、数量、保存時間、その他のオプションを指定します。 log.SetOutput 関数を使用して、ロガー インスタンスをデフォルトの出力場所に設定します。この方法で書き込まれたログ ファイルは、サイズ制限や期限切れ時の自動ローテーションなどの機能をサポートします。
概要上記の紹介を通じて、Go 言語が豊富なログ ライブラリを提供し、開発者が独自のプロジェクトのニーズに応じてさまざまなログ ライブラリを選択できることがわかりました。基本的な使用に最も適しているのはログ パッケージであり、ほとんどの場合ロギングを満足させることができます。大量のログ分析とクエリが必要なプロジェクトの場合は、ロギング効率を効果的に向上させる高性能の zap ログ ライブラリを使用できます。ログを処理する必要がある サイズをローテーションまたは制限する場合は、ランバージャック ライブラリを使用してログ ファイルを簡単に管理することを検討できます。 以上がGo言語のロギングライブラリとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。