アプリケーションファイルレコーダー

func main() {
    app := iris.Default()
    // ファイルに記録
    // ファイルへの書き込み時、自動的にカラーを無効にする
    f, _ := os.Create("iris.log")
    app.Logger().SetOutput(f)

    // ファイルとコンソールの両方にログを書き込む必要がある場合、次のコードを使用する
    // app.Logger().AddOutput(os.Stdout)
    
    app.Get("/ping", func(ctx iris.Context) {
        ctx.WriteString("pong")
    })

   app.Listen(":8080")
}

ログ出力の色を制御する

デフォルトでは、コンソール上のログ出力は検出された TTY に基づいてカラー表示されます。

通常のケースでレベルのタイトル、テキスト、色、スタイルをカスタマイズします。

gologpio をインポートする:

import (
    "github.com/kataras/golog"
    "github.com/kataras/pio"
    // [...]
)

DebugLevel などのレベルを取得してカスタマイズします:

level := golog.Levels[golog.DebugLevel]

レベルのテキスト、タイトル、スタイルを完全に制御できます:

// レベルの名前
// 小文字の名前は、文字列のレベルを正しいレベル型に変換するために使用されます
Name string
// この特定のログレベルに参照できる代替名
// 例えば Name = "warn" のような場合、AlternativeNames = []string{"warning"} がオプションのフィールドです
// したがって、Name を単純な文字列とし、この新しいフィールドを作成します
AlternativeNames []string
// タイトルはログレベルの接頭辞です
// `ColorCode` と `Style` もあります
// `ColorCode` と `Style` はライター間で一貫している必要があります
Title string
// `Title` の色
ColorCode int
// `Title` のための豊富なオプション
Style []pio.RichOption

例のコード:

level := golog.Levels[golog.DebugLevel]
level.Name = "debug" // デフォルト
level.Title = "[DBUG]" // デフォルト
level.ColorCode = pio.Yellow // デフォルト

出力形式を変更:

app.Logger().SetFormat("json", "    ")

カスタムフォーマッターを登録:

app.Logger().RegisterFormatter(new(myFormatter))

golog.Formatter インターフェース は以下のようになります:

// Formatter は、ロガーのライターにログを出力する責任があります
type Formatter interface {
    // フォーマッターの名前
    String() string
    // 任意のオプションを設定し、共通の場合はクローンされたオブジェクトを返します。`Logger.SetFormat` を参照してください
    Options(opts ...interface{}) Formatter
    // "dest" ロガーに "log" を書き込みます
    Format(dest io.Writer, log *Log) bool
}

レベル別の出力と形式を変更:

app.Logger().SetLevelOutput("error", os.Stderr)
app.Logger().SetLevelFormat("json")

リクエストのログ記録

上記で見たアプリケーションのロガーは、主にアプリケーションに関連する情報やエラーを記録するために使用されます。一方、以下で見るアクセスロガーは、主に受信したHTTPリクエストとレスポンスを記録するために使用されます。

package main

import (
    "os"

    "github.com/kataras/iris/v12"
    "github.com/kataras/iris/v12/middleware/accesslog"
)

// 例およびコメントを注意深く読んでください。
func makeAccessLog() *accesslog.AccessLog {
    // 新しいアクセスログミドルウェアを初期化します。
    ac := accesslog.File("./access.log")
    // この行を削除してコンソールへのログ記録を無効にします:
    ac.AddOutput(os.Stdout)

    // デフォルトの設定:
    ac.Delim = '|'
    ac.TimeFormat = "2006-01-02 15:04:05"
    ac.Async = false
    ac.IP = true
    ac.BytesReceivedBody = true
    ac.BytesSentBody = true
    ac.BytesReceived = false
    ac.BytesSent = false
    ac.BodyMinify = true
    ac.RequestBody = true
    ac.ResponseBody = false
    ac.KeepMultiLineError = true
    ac.PanicLog = accesslog.LogHandler
    
    // フォーマッタが不足している場合は、デフォルトの行フォーマットを使用します:
    // Time|Delay|Status|Method|Path|IP|Path Query Parameters|Received Bytes|Sent Bytes|Request|Response|
    //
    // カスタムフォーマッタを設定します:
    ac.SetFormatter(&accesslog.JSON{
        Indent:    "  ",
        HumanTime: true,
    })
    // ac.SetFormatter(&accesslog.CSV{})
    // ac.SetFormatter(&accesslog.Template{Text: "{{.Code}}"})
    
    return ac
}

func main() {
    ac := makeAccessLog()
    defer ac.Close() // ファイルを閉じます。

    app := iris.New()
    // ミドルウェアを登録します(UseRouterを使用すると、HTTPエラーもキャッチできます)。
    app.UseRouter(ac.Handler)
    
    app.Get("/", indexHandler)
    
    app.Listen(":8080")
}

func indexHandler(ctx iris.Context) {
    ctx.WriteString("OK")
}

他の例についてはこちらをご覧ください:_examples/logging/request-logger