Perekam Berkas Aplikasi

func main() {
    app := iris.Default()
    // Merekam ke sebuah berkas
    // Secara otomatis menonaktifkan warna saat menulis ke berkas
    f, _ := os.Create("iris.log")
    app.Logger().SetOutput(f)

    // Jika perlu menulis log ke berkas dan konsol, gunakan kode berikut
    // app.Logger().AddOutput(os.Stdout)
    
    app.Get("/ping", func(ctx iris.Context) {
        ctx.WriteString("pong")
    })

   app.Listen(":8080")
}

Kontrol Warna Keluaran Log

Secara default, keluaran log di konsol akan diwarnai berdasarkan TTY yang dideteksi.

Sesuaikan judul level, teks, warna, dan gaya dalam kasus reguler.

Impor golog dan pio:

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

Dapatkan level untuk disesuaikan, seperti DebugLevel:

level := golog.Levels[golog.DebugLevel]

Anda memiliki kontrol penuh atas teks, judul, dan gaya level:

// Nama level
// Nama huruf kecil akan digunakan
// untuk mengonversi level string ke jenis level yang benar
Name string
// AlternativeNames adalah nama-nama yang dapat digunakan untuk merujuk level log spesifik ini
// seperti Name = "warn"
// AlternativeNames = []string{"warning"}, ini adalah bidang opsional,
// jadi kita menjaga Nama sebagai string sederhana dan membuat bidang baru ini.
AlternativeNames []string
// Judul adalah awalan dari level log.
// Juga ada `ColorCode` dan `Style`.
// `ColorCode` dan `Style` harus konsisten antara penulis.
Title string
// ColorCode adalah warna untuk `Title`.
ColorCode int
// Style adalah satu atau lebih opsi kaya untuk `Title`.
Style []pio.RichOption

Contoh kode:

level := golog.Levels[golog.DebugLevel]
level.Name = "debug" // default
level.Title = "[DBUG]" // default
level.ColorCode = pio.Yellow // default

Ubah format keluaran:

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

Daftarkan formatter kustom:

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

Antarmuka golog.Formatter adalah sebagai berikut:

// Formatter bertanggung jawab untuk mencetak log ke penulis logger.
type Formatter interface {
    // Nama formatter.
    String() string
    // Atur opsi apa pun dan kembalikan objek yang di-klon, jika umum. Lihat `Logger.SetFormat`.
    Options(opts ...interface{}) Formatter
    // Menulis "log" ke "dest" logger.
    Format(dest io.Writer, log *Log) bool
}

Ubah keluaran dan format berdasarkan level:

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

Pencatatan Permintaan

Logger aplikasi yang kita lihat di atas terutama digunakan untuk mencatat informasi dan kesalahan terkait dengan aplikasi. Di sisi lain, logger akses yang kita lihat di bawah ini terutama digunakan untuk mencatat permintaan dan respons HTTP yang masuk.

package main

import (
    "os"

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

// Baca contoh dan komentarnya dengan teliti.
func buatLogAkses() *accesslog.AccessLog {
    // Inisialisasi middleware log akses baru.
    ac := accesslog.File("./access.log")
    // Hapus baris ini untuk menonaktifkan pencatatan ke konsol:
    ac.AddOutput(os.Stdout)

    // Konfigurasi default:
    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
    
    // Gunakan format baris default jika formatter hilang:
    // Waktu|Keterlambatan|Status|Metode|Jalur|IP|Parameter Kueri Jalur|Diterima Bytes|Dikirim Bytes|Permintaan|Respons|
    //
    // Tetapkan formatter kustom:
    ac.SetFormatter(&accesslog.JSON{
        Indent:    "  ",
        HumanTime: true,
    })
    // ac.SetFormatter(&accesslog.CSV{})
    // ac.SetFormatter(&accesslog.Template{Text: "{{.Code}}"})
    
    return ac
}

func main() {
    ac := buatLogAkses()
    defer ac.Close() // Tutup file.

    app := iris.New()
    // Daftarkan middleware (menggunakan UseRouter juga dapat menangani kesalahan HTTP).
    app.UseRouter(ac.Handler)
    
    app.Get("/", penanganIndeks)
    
    app.Listen(":8080")
}

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

Baca contoh lainnya di sini: _examples/logging/request-logger.