Logrusとは
Logrusは、Go言語の構造化されたログ出力ライブラリであり、標準パッケージであるlogよりも拡張性が高いです。様々な出力フォーマットをサポートし、ログレベルによるフィルタリングやフックと呼ばれる機能により、特定のイベントが発生したときにアクションを起こすことが可能です。
Go言語でのログ出力: ベストパフォーマンスを出すためのパッケージ比較
Logrusの基本的な使い方
まずはLogrusをインストールします。以下のコマンドを実行します。
go get github.com/sirupsen/logrus
次に、基本的なログ出力の方法を確認します。以下のコードは、各ログレベルのメッセージを出力する例です。
package main
import (
log "github.com/sirupsen/logrus"
)
func main() {
log.Info("Info level log")
log.Warn("Warn level log")
log.Error("Error level log")
}
これを実行すると、次のような出力が得られます。
INFO[0000] Info level log
WARN[0000] Warn level log
ERRO[0000] Error level log
出力には、ログレベルとメッセージの他に、ログが出力されたタイムスタンプも含まれます。これはLogrusのデフォルトの設定ですが、これらはカスタマイズすることが可能です。
Logrusでの構造化ログ出力
Logrusの大きな特徴の一つに、構造化されたログを簡単に出力できる点があります。構造化ログとは、ログメッセージに加えてキーと値のペアを一緒に出力するものです。以下にその使い方を示します。
package main
import (
log "github.com/sirupsen/logrus"
)
func main() {
log.WithFields(log.Fields{
"animal": "walrus",
"number": 8,
}).Info("A group of walrus emerges from the ocean")
}
これを実行すると、次のような出力が得られます。
INFO[0000] A group of walrus emerges from the ocean animal=walrus number
ログレベルの設定
Logrusではログレベルを設定することで、そのレベル以上の重要度を持つログのみを出力するように制御することが可能です。これは例えば、本番環境では重要なエラーログだけを見たいが、開発環境ではより詳細なログを見たいといった場合に便利です。以下にログレベルを設定するコードを示します。
package main
import (
log "github.com/sirupsen/logrus"
)
func main() {
log.SetLevel(log.WarnLevel)
log.Info("Info level log") // この行は出力されない
log.Warn("Warn level log")
log.Error("Error level log")
}
このコードではログレベルをWarnに設定しているため、Infoレベルのログは出力されません。
カスタムフォーマッタの使用
Logrusではログの出力フォーマットをカスタマイズすることが可能です。具体的には、デフォルトのテキストフォーマッタの他に、JSON形式で出力するJSONフォーマッタが提供されています。また、独自の出力フォーマットを定義することも可能です。
以下にJSONフォーマッタを用いた例を示します。
package main
import (
log "github.com/sirupsen/logrus"
)
func main() {
// ログフォーマッタをJSONに設定
log.SetFormatter(&log.JSONFormatter{})
log.Info("Info level log")
}
これを実行すると、ログがJSON形式で出力されます。
{"level":"info","msg":"Info level log","time":"2006-01-02T15:04:05Z07:00"}
まとめ
以上がLogrusの基本的な使い方についての説明です。ロギングはアプリケーションの動作を理解し、問題を診断する上で重要な役割を果たします。Logrusはこの重要なタスクをサポートする強力なツールです。