ファイバーログ

プログラムの動作を観察し、問題の診断、また関連するアラートの設定などにログを使用することができます。適切に構造化されたログを定義することで、検索効率が向上し、問題の処理を容易にすることができます。

Fiberは、標準出力にログを出力するデフォルトの方法を提供します。また、log.Infolog.Errorflog.Warnwなどのいくつかのグローバル関数も提供します。

ログレベル

const (
    LevelTrace Level = iota
    LevelDebug
    LevelInfo
    LevelWarn
    LevelError
    LevelFatal
    LevelPanic
)

カスタムログ

FiberはAllLoggerインターフェースを提供し、さまざまなログライブラリに適応することができます。

type CommonLogger interface {
    Logger
    FormatLogger
    WithLogger
}

type AllLogger interface {
    CommonLogger
    ControlLogger
    WithLogger
}

ログの出力

注意:Fatalレベルでのメソッド呼び出しは、ログを出力した後にプログラムの実行を中断します。注意して使用してください。異なるレベルで直接ログを出力すると、それらはデフォルトでmessageKeyに入力され、msgに設定されます。

log.Info("こんにちは、世界!")
log.Debug("大丈夫ですか?")
log.Info("42は生命、宇宙、そしてすべての答えです")
log.Warn("我々は攻撃を受けています!")
log.Error("ヒューストン、問題が発生しています。")
log.Fatal("さようなら、そしてすべての魚のための感謝。")
log.Panic("システムがダウンしています。")

異なるレベルでログをフォーマットして出力する場合、すべてのメソッドはfで終わります。

log.Debugf("こんにちは%s", "、少年")
log.Infof("%dは生命、宇宙、そしてすべての答えです", 233)
log.Warnf("我々は攻撃を受けています%s!", "、ボス")
log.Errorf("%s、問題が発生しています。", "マスターシフー")
log.Fatalf("さようなら、そして%sのすべての感謝。", "、バナナ")

キーと値でメッセージを出力します。キーと値がペアになっていない場合、「KEYVALS UNPAIRED」と出力されます。

log.Debugw("", "こんにちは", "少年")
log.Infow("", "数", 233)
log.Warnw("", "仕事", "ボス")
log.Errorw("", "名前", "マスターシフー")
log.Fatalw("", "果物", "バナナ")

グローバルログ

プロジェクトでシンプルなログ関数だけを使用し、いつでもグローバルに出力したい場合は、グローバルログを提供します。

import "github.com/gofiber/fiber/v2/log"

log.Info("情報")
log.Warn("警告")

上記のコードは、標準出力にデフォルトのlog.DefaultLoggerを使用します。contribフォルダにすでに実装されたアダプタを見つけるか、独自のLoggerを実装し、log.SetLoggerを使用してグローバルロガーを設定することもできます。

import (
    "log"
    fiberlog "github.com/gofiber/fiber/v2/log"
)

var _ log.AllLogger = (*customLogger)(nil)

type customLogger struct {
    stdlog *log.Logger
}

// ...
// カスタムロガーをインジェクト
fiberlog.SetLogger(customLogger)

レベルの設定

log.SetLevelは、このレベルよりも低いログは出力されないように設定します。デフォルトのログレコーダーはLevelTraceです。

このメソッドは 並行性セーフではないことに注意してください。

import "github.com/gofiber/fiber/v2/log"

log.SetLevel(log.LevelInfo)

出力の設定

log.SetOutputは、ログの出力先を設定します。デフォルトでは、ロガーはコンソールにログを出力します。

var logger AllLogger = &defaultLogger{
    stdlog: log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile|log.Lmicroseconds),
    depth:  4,
}

出力先をファイルに設定します。

// test.logファイルに出力
f, err := os.OpenFile("test.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
    return
}
log.SetOutput(f)

出力先をコンソールとファイルの両方に設定します。

// test.logファイルに出力
file, _ := os.OpenFile("test.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
iw := io.MultiWriter(os.Stdout, file)
log.SetOutput(iw)

コンテキストのバインド

コンテキストを設定し、次のメソッドを使用して指定したコンテキストにバインドされた CommonLogger インスタンスを返します。

commonLogger := log.WithContext(ctx)
commonLogger.Info("info")

注意: これはFiberフレームワークのデフォルトのロギングライブラリです。もちろん、他のよく知られているGoオープンソースのログライブラリを選択することもできます。