Go のログ レベル

Sheeraz Gul 2023年6月20日
  1. Go のログ レベル
  2. zerolog を使用した Go のログ レベル
  3. Logrus を使用した Go のログ レベル
Go のログ レベル

このチュートリアルでは、Golang でログ レベルを作成して使用する方法を示します。

Go のログ レベル

Golang は、log という名前のロギング用のパッケージを提供します。これは単純なロギング パッケージです。 このパッケージは、レベル別ログを提供しません。 レベル化されたログが必要な場合は、debuginfowarn などのプレフィックスを手動で追加する必要があります。

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つのパラメーターを使用して新しいロガーを作成します。

  1. out - out は、io.writer インターフェイスを実装してログ データを書き込むために使用されます。
  2. prefix - prefix は、各行の先頭に追加される文字列です。
  3. flag - flag は、ロガーが使用するプロパティを定義するために使用されます。

通常、7つのログ レベルが使用されます。

ログレベル 説明
Trace 最低レベル
Debug セカンドレベル
Info 第 3 レベル
Warn 第 4 レベル
Error 5 番目のレベル
Fatal シックス レベル
Panic 最高レベル

InfoWarningDebug、および 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 には、InfoWarningDebugError、および 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は、TraceDebugInfoWarnErrorFatalPanicの 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 Gul
Sheeraz Gul avatar Sheeraz Gul avatar

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