Go 言語の開発において、ログは非常に重要なリンクであり、ログを通じて、プログラムの実行ステータス、エラー メッセージ、パフォーマンスのボトルネックなどの重要な情報を記録できます。 Go 言語には、標準ライブラリのログ、サードパーティ ライブラリの logrus、zap など、選択できるログ ライブラリが多数あります。この記事ではGoのロギングライブラリの使い方を紹介します。
1. Go 標準ライブラリにログインする
Go 標準ライブラリのログ パッケージは、標準出力、ファイル、または他の io.Writer インスタンスに出力できる簡単なログ記録メソッドを提供します。ログ パッケージには、Println、Printf、および Print の 3 つの出力メソッドがあります。このうち、Println メソッドと Printf メソッドは出力ステートメントの末尾に改行文字を追加しますが、Print メソッドは追加しません。標準出力へのログ出力の例を次に示します。
package main import ( "log" ) func main() { log.Println("hello world!") }
出力結果は次のとおりです。
2021/05/25 22:12:57 hello world!
デフォルトでは、ログ出力ログには日付と時刻の情報が含まれます。良い機能です。タイムスタンプとログプレフィックスは、ログパラメータを設定することでオフにできます。例:
log.SetFlags(log.Flags() &^ (log.Ldate | log.Ltime)) log.SetPrefix("")
2. logrus
logrus は、より多くの機能と柔軟性を備えた人気のあるサードパーティのログ ライブラリです。 logrusを使用すると、ログへのフィールドの追加、json形式のログの記録、柔軟なログレベル制御などが可能になります。以下は簡単なログの例です:
package main import ( "github.com/sirupsen/logrus" ) func main() { log := logrus.New() log.WithFields(logrus.Fields{ "name": "john", "age": 30, }).Info("user information") }
出力結果は次のとおりです:
{"age":30,"name":"john","level":"info","msg":"user information","time":"2021-05-25T22:33:38+08:00"}
上の例では、WithFields メソッドを使用して、名前と年齢の 2 つのフィールドをログに追加しました。 。 Logrus は、デバッグ、情報、警告、エラー、致命的、パニック レベルなどのログ レベルに基づいてさまざまなログの出力もサポートしています。 logrus のグローバル レベルを設定することで、出力ログ レベルを制御できます。たとえば、次の例では、出力ログ レベルを警告以上に設定します:
package main import ( "github.com/sirupsen/logrus" ) func main() { log := logrus.New() log.SetLevel(logrus.WarnLevel) log.Debug("this is debug log") log.Warn("this is warning log") log.Error("this is error log") }
出力結果は次のとおりです:
time="2021-05-25T22:44:34+08:00" level=warning msg="this is warning log" time="2021-05-25T22:44:34+08:00" level=error msg="this is error log"
3. zap
zap も人気があります。サードパーティのログ ライブラリは、logrus よりも高いパフォーマンスとより包括的な機能を備えています。 zap は、構造化ログとキャッシュされたログをサポートするタイプセーフなログ ライブラリです。以下は、zap を使用してログをファイルに出力する例です。
package main import ( "go.uber.org/zap" ) func main() { logger, _ := zap.NewProduction() defer logger.Sync() logger.Info("this is info log") logger.Warn("this is warning log") logger.Error("this is error log") }
上の例では、zap.NewProduction() を通じて zap Logger インスタンスを作成し、Info、Warn、および Error の 3 つのメソッドを使用して、異なるレベルのログを出力します。 defer logger.Sync() ステートメントを通じて、キャッシュされたすべてのログ データがディスクにフラッシュされていることを確認します。
zap ライブラリは柔軟性があるため、グローバル ログ レベル、ログ出力形式の設定、フィールドの追加、時刻形式の変更など、さまざまな方法でカスタマイズできます。以下は、zap を使用してグローバル ログ レベルを設定する例です。
package main import ( "go.uber.org/zap" ) func main() { logger, _ := zap.NewProduction() defer logger.Sync() logger.Warn("this is warning log") logger.Error("this is error log") logger, _ = logger.WithOptions(zap.IncreaseLevel(zap.InfoLevel)) logger.Info("this is info log") }
上の例では、最初に 2 つの警告ログとエラー ログを出力し、次に WithOptions メソッドを使用してグローバル ログ レベルを Info に上げました。そして情報ログを出力します。
結論
ログは開発に不可欠な部分です。Go 言語には標準ライブラリ ログが用意されており、logrus や zap など、選択できるサードパーティのログ ライブラリも多数あります。各ログ ライブラリには異なる特性があり、さまざまなシナリオに適しています。実際のアプリケーションに応じて、さまざまなログ ライブラリと構成方法を使用して、プログラムをより安定して保守しやすくすることができます。
以上がGoでログライブラリを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。