Go のログ レベル
このチュートリアルでは、Golang でログ レベルを作成して使用する方法を示します。
Go のログ レベル
Golang は、log
という名前のロギング用のパッケージを提供します。これは単純なロギング パッケージです。 このパッケージは、レベル別ログを提供しません。 レベル化されたログが必要な場合は、debug
、info
、warn
などのプレフィックスを手動で追加する必要があります。
Golang の log
パッケージでさえ、レベル化されたログ機能を備えていませんが、ログ レベルを手動で実装するための基本的なツールを提供しています。 Golang log
パッケージの基本的な例を試してみましょう:
package main
import "log"
func main() {
log.Println("Hello, This is delftstack.com!")
}
上記のコードは、指定されたコンテンツをログに記録して出力します。 出力を参照してください。
2009/11/10 23:00:00 Hello, This is delftstack.com!
しかし、ログレベルはどうですか? 前述のように、カスタム ログ レベルとカスタム ロガーを作成できます。
メソッド log.New()
を使用できます。このメソッドは、次の 3つのパラメーターを使用して新しいロガーを作成します。
out
-out
は、io.writer
インターフェイスを実装してログ データを書き込むために使用されます。prefix
-prefix
は、各行の先頭に追加される文字列です。flag
-flag
は、ロガーが使用するプロパティを定義するために使用されます。
通常、7つのログ レベルが使用されます。
ログレベル | 説明 |
---|---|
Trace |
最低レベル |
Debug |
セカンドレベル |
Info |
第 3 レベル |
Warn |
第 4 レベル |
Error |
5 番目のレベル |
Fatal |
シックス レベル |
Panic |
最高レベル |
Info
、Warning
、Debug
、および Error
レベルに基づいてカスタム ログ レベルを作成する例を試してみましょう。
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
)
var (
Warning_Level *log.Logger
Info_Level *log.Logger
Debug_Level *log.Logger
Error_Level *log.Logger
)
func init() {
file, err := os.OpenFile("Demo_logs.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
if err != nil {
log.Fatal(err)
}
Info_Level = log.New(file, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)
Warning_Level = log.New(file, "WARNING: ", log.Ldate|log.Ltime|log.Lshortfile)
Debug_Level = log.New(file, "Debug: ", log.Ldate|log.Ltime|log.Lshortfile)
Error_Level = log.New(file, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile)
}
func main() {
Info_Level.Println("Loading the application.")
Info_Level.Println("Loading taking time.")
Warning_Level.Println("There is warning.")
Debug_Level.Println("Here is debugging information.")
Error_Level.Println("An Error Occured.")
// read the log file
data, err := ioutil.ReadFile("Demo_logs.txt")
if err != nil {
log.Panicf("failed reading data from file: %s", err)
}
fmt.Printf("\nThe file data is : %s", data)
}
上記のコードは、Golang の log
パッケージを使用してカスタム ログ レベルを作成し、ログ情報をファイルに書き込みます。 出力を参照してください。
The file data is : INFO: 2009/11/10 23:00:00 prog.go:32: Loading the application.
INFO: 2009/11/10 23:00:00 prog.go:33: Loading taking time.
WARNING: 2009/11/10 23:00:00 prog.go:34: There is warning.
Debug: 2009/11/10 23:00:00 prog.go:35: Here is debugging information.
ERROR: 2009/11/10 23:00:00 prog.go:36: An Error Occured.
Program exited.
致命的
およびパニック
レベルも、プログラムまたはアプリケーションの終了を引き起こす可能性があります。そのため、組み込みのログ
パッケージでこれらのログ レベルを作成することはできません。 しかし、log
パッケージ以外に、7つの組み込みログ レベルを提供するいくつかのサードパーティ ログ パッケージがあります。 それらを調べてみましょう。
zerolog
を使用した Go のログ レベル
zerolog
は、構造化された JSON ロギングに使用される Golang のサードパーティ ライブラリです。 zerolog
はグローバル ロガーを提供します。これは、シンプルなロギングのために log
サブパッケージと一緒に使用できます。
単純なロギングに加えて、zerolog
は組み込みのログ レベルも提供します。 zerolog
には、Info
、Warning
、Debug
、Error
、および Trace
を含む 7つのログ レベルがあります。
zerolog
パッケージは GitHub で提供されており、次のコマンドを使用して Golang でダウンロードできます。
go get -u github.com/rs/zerolog/log
ログ レベルの使用は、zerolog
を使用すると非常に簡単です。 以下の例を参照してください。
package main
import (
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
func main() {
zerolog.SetGlobalLevel(zerolog.InfoLevel)
log.Trace().Msg("Tracing..")
log.Info().Msg("The file is loading.")
log.Debug().Msg("Here is some useful debugging information.")
log.Warn().Msg("There is a warning!")
log.Error().Msg("An Error Occured.")
log.Fatal().Msg("An Fatal Error Occured.")
log.Panic().Msg("This is a panic situation.")
}
上記のコードは、ログ レベルに基づいて情報を記録します。 出力を参照してください。
{"level":"info","time":"2009-11-10T23:00:00Z","message":"The file is loading."}
{"level":"warn","time":"2009-11-10T23:00:00Z","message":"There is a warning!"}
{"level":"error","time":"2009-11-10T23:00:00Z","message":"An Error Occured."}
{"level":"fatal","time":"2009-11-10T23:00:00Z","message":"An Fatal Error Occured."}
Program exited.
Logrus
を使用した Go のログ レベル
Logrus
は、JSON でのログ記録を提供する Golang 用の別のサードパーティ パッケージです。 Logrus
パッケージは GitHub で提供されており、cmd で次のコマンドを使用してダウンロードできます。
go get "github.com/Sirupsen/logrus"
Logrus
は、Trace
、Debug
、Info
、Warn
、Error
、Fatal
、Panic
の 7つのログ レベルを重大度に基づいて並べ替えて提供します。 これらのログ レベルの使用は、サブパッケージlog
を使用する必要があるzerolog
にも似ています。
Logrus
のログレベルの例を試してみましょう:
package main
import (
log "github.com/sirupsen/logrus"
)
func main() {
log.SetFormatter(&log.JSONFormatter{})
log.SetLevel(log.DebugLevel)
log.SetLevel(log.TraceLevel)
//log.SetLevel(log.PanicLevel)
log.Trace("Tracing the log info, Lowest level")
log.Debug("Debugging information. Level two")
log.Info("Log Info. Level three")
log.Warn("This is warning. Level Four")
log.Error("An error occured. Level Five")
// Calls os.Exit(1) after logging
log.Fatal("Application terminated. Level Six")
// Calls panic() after logging
log.Panic("Panic Situation. Highest Level.")
}
上記のコードは、Logrus
パッケージを使用して、レベルに基づいて情報を記録します。 一部のログ レベルを表示するには、レベルを設定する必要があります。
出力を参照してください。
{"level":"trace","msg":"Tracing the log info, Lowest level","time":"2009-11-10T23:00:00Z"}
{"level":"debug","msg":"Debugging information. Level two","time":"2009-11-10T23:00:00Z"}
{"level":"info","msg":"Log Info. Level three","time":"2009-11-10T23:00:00Z"}
{"level":"warning","msg":"This is warning. Level Four","time":"2009-11-10T23:00:00Z"}
{"level":"error","msg":"An error occured. Level Five","time":"2009-11-10T23:00:00Z"}
{"level":"fatal","msg":"Application terminated. Level Six","time":"2009-11-10T23:00:00Z"}
Program exited.
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook