ロガー

Fiber用のミドルウェアであり、HTTPリクエストとレスポンスに関する詳細な情報を記録します。

インターフェース

func New(config ...Config) fiber.Handler

Fiberウェブフレームワークのミドルウェアパッケージをインポートします:

import (
    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/fiber/v2/middleware/logger"
)

注意: 登録の順序は重要です。このミドルウェアの後に登録されたルートのみがログに記録されます。そのため、このミドルウェアは最初に登録されるべきです。

Fiberアプリケーションを初期化した後、以下の方法でミドルウェアを登録することができます:

// デフォルトの構成で初期化
app.Use(logger.New())

// または、構成をカスタマイズする
// リモートIPとポートを記録
app.Use(logger.New(logger.Config{
    Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
}))

// リクエストIDを記録
app.Use(requestid.New())
app.Use(logger.New(logger.Config{
    // より多くのオプションについては、Configセクションを参照してください
    Format: "${pid} ${locals:requestid} ${status} - ${method} ${path}\n",
}))

// タイムゾーンと時刻のフォーマットを変更
app.Use(logger.New(logger.Config{
    Format:     "${pid} ${status} - ${method} ${path}\n",
    TimeFormat: "02-Jan-2006",
    TimeZone:   "America/New_York",
}))

// カスタムファイルライター
file, err := os.OpenFile("./123.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
    log.Fatalf("ファイルを開く際にエラーが発生しました: %v", err)
}
defer file.Close()
app.Use(logger.New(logger.Config{
    Output: file,
}))

// カスタムタグを追加
app.Use(logger.New(logger.Config{
    CustomTags: map[string]logger.LogFunc{
        "custom_tag": func(output logger.Buffer, c *fiber.Ctx, data *logger.Data, extraParam string) (int, error) {
            return output.WriteString("これはカスタムタグです")
        },
    },
}))

// ログ出力後のコールバック関数
app.Use(logger.New(logger.Config{
    TimeFormat: time.RFC3339Nano,
    TimeZone:   "Asia/Shanghai",
    Done: func(c *fiber.Ctx, logString []byte) {
        if c.Response().StatusCode() != fiber.StatusOK {
            reporter.SendToSlack(logString)
        }
    },
}))

// デフォルトフォーマットで出力する際に色を無効にする
app.Use(logger.New(logger.Config{
    DisableColors: true,
}))

構成

プロパティ タイプ 説明 デフォルト値
Next func(*fiber.Ctx) bool Next はtrueを返すとミドルウェアをスキップする関数を定義します。 nil
Done func(*fiber.Ctx, []byte) Done は、リクエストのログ文字列をOutputに書き込んだ後に呼び出される関数であり、ログ文字列がパラメータとして渡されます。 nil
CustomTags map[string]LogFunc tagFunctionsはカスタムタグ操作を定義します。 map[string]LogFunc
Format string Format はログのタグを定義します。 [${time}] ${status} - ${latency} ${method} ${path}\n
TimeFormat string TimeFormat はログのタイムスタンプの時刻フォーマットを定義します。 15:04:05
TimeZone string TimeZone は"UTC"、"America/New_York"、"Asia/Chongqing"などとして指定できます。 "Local"
TimeInterval time.Duration TimeInterval はタイムスタンプの更新までの遅延時間です。 500 * time.Millisecond
Output io.Writer Output はログを書き込むためのライターです。 os.Stdout
DisableColors bool DisableColors はログの出力時に色を無効にするかどうかを定義します。 false
enableColors bool ログの出力時に色を有効にするための内部フィールドです。(これは設定可能なフィールドではありません) -
enableLatency bool ログでレイテンシ測定を有効にするための内部フィールドです。(これは設定可能なフィールドではありません) -
timeZoneLocation *time.Location タイムゾーンの位置を指定するための内部フィールドです。(これは設定可能なフィールドではありません) -

デフォルト設定

var ConfigDefault = Config{
    Next:          nil,
    Done:          nil,
    Format:        "[${time}] ${status} - ${latency} ${method} ${path}\n",
    TimeFormat:    "15:04:05",
    TimeZone:      "Local",
    TimeInterval:  500 * time.Millisecond,
    Output:        os.Stdout,
    DisableColors: false,
}

定数

// ロガー変数
const (
    TagPid               = "pid"               	// プロセスID
    TagTime              = "time"              	// 時間
    TagReferer           = "referer"           	// リファラー
    TagProtocol          = "protocol"          	// プロトコル
    TagPort              = "port"              	// ポート
    TagIP                = "ip"                	// IPアドレス
    TagIPs               = "ips"               	// IPアドレス
    TagHost              = "host"              	// ホスト
    TagMethod            = "method"            	// リクエストメソッド
    TagPath              = "path"              	// パス
    TagURL               = "url"               	// URL
    TagUA                = "ua"                	// ユーザーエージェント
    TagLatency           = "latency"           	// 遅延
    TagStatus            = "status"            	// レスポンスステータス
    TagResBody           = "resBody"           	// レスポンスボディ
    TagReqHeaders        = "reqHeaders"        	// リクエストヘッダー
    TagQueryStringParams = "queryParams"       	// クエリパラメーター
    TagBody              = "body"              	// リクエストボディ
    TagBytesSent         = "bytesSent"         	// 送信バイト数
    TagBytesReceived     = "bytesReceived"     	// 受信バイト数
    TagRoute             = "route"             	// ルート
    TagError             = "error"             	// エラー
    // 廃止: TagReqHeaderを使用してください
    TagHeader            = "header:"           	// リクエストヘッダー
    TagReqHeader         = "reqHeader:"        	// リクエストヘッダー
    TagRespHeader        = "respHeader:"       	// レスポンスヘッダー
    TagQuery             = "query:"            	// クエリ
    TagForm              = "form:"             	// フォーム
    TagCookie            = "cookie:"           	// クッキー
    TagLocals            = "locals:"           	// ローカル変数
    // 色
    TagBlack             = "black"             	// 黒
    TagRed               = "red"               	// 赤
    TagGreen             = "green"             	// 緑
    TagYellow            = "yellow"            	// 黄色
    TagBlue              = "blue"              	// 青
    TagMagenta           = "magenta"           	// マゼンタ
    TagCyan              = "cyan"              	// シアン
    TagWhite             = "white"             	// 白
    TagReset             = "reset"             	// 色をリセット
)