アプリケーションファイルレコーダー
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 に基づいてカラー表示されます。
通常のケースでレベルのタイトル、テキスト、色、スタイルをカスタマイズします。
golog
と pio
をインポートする:
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。