Pencatat

Sebuah middleware untuk Fiber yang digunakan untuk mencatat informasi detail tentang permintaan dan tanggapan HTTP.

Antarmuka

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

Contoh

Impor paket middleware dari kerangka kerja web Fiber:

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

Catatan: Urutan registrasi penting. Hanya rute yang terdaftar setelah middleware ini yang akan dicatat. Oleh karena itu, middleware ini harus menjadi salah satu yang pertama yang didaftarkan.

Setelah menginisialisasi aplikasi Fiber, dapat mendaftarkan middleware dengan cara berikut:

// Inisialisasi dengan konfigurasi default
app.Use(logger.New())

// Atau sesuaikan konfigurasinya
// Catat alamat IP dan port remote
app.Use(logger.New(logger.Config{
    Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
}))

// Catat ID permintaan
app.Use(requestid.New())
app.Use(logger.New(logger.Config{
    // Untuk opsi lebih lanjut, lihat bagian Config
    Format: "${pid} ${locals:requestid} ${status} - ${method} ${path}\n",
}))

// Ubah zona waktu dan format waktu
app.Use(logger.New(logger.Config{
    Format:     "${pid} ${status} - ${method} ${path}\n",
    TimeFormat: "02-Jan-2006",
    TimeZone:   "America/New_York",
}))

// Penulis file kustom
file, err := os.OpenFile("./123.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
    log.Fatalf("error opening file: %v", err)
}
defer file.Close()
app.Use(logger.New(logger.Config{
    Output: file,
}))

// Tambahkan tag kustom
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("Ini adalah tag kustom")
        },
    },
}))

// Fungsi panggilan kembali setelah mencatat
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) 
        }
    },
}))

// Nonaktifkan warna saat mencetak dalam format default
app.Use(logger.New(logger.Config{
    DisableColors: true,
}))

Konfigurasi

Properti Tipe Deskripsi Nilai Default
Next func(*fiber.Ctx) bool Next mendefinisikan sebuah fungsi yang mengabaikan middleware saat mengembalikan nilai true. nil
Done func(*fiber.Ctx, []byte) Done adalah fungsi yang dipanggil setelah menulis string log permintaan ke Output, dengan string log yang dilewatkan sebagai parameter. nil
CustomTags map[string]LogFunc tagFunctions mendefinisikan operasi tag kustom. map[string]LogFunc
Format string Format mendefinisikan tag log. [${time}] ${status} - ${latency} ${method} ${path}\n
TimeFormat string TimeFormat mendefinisikan format waktu cap waktu log. 15:04:05
TimeZone string TimeZone dapat ditentukan sebagai "UTC", "America/New_York", "Asia/Chongqing", dll. "Local"
TimeInterval time.Duration TimeInterval adalah waktu penundaan sebelum memperbarui cap waktu. 500 * time.Millisecond
Output io.Writer Output adalah penulis yang digunakan untuk menulis log. os.Stdout
DisableColors bool DisableColors mendefinisikan apakah output log harus berwarna. false
enableColors bool Bidang internal untuk mengaktifkan warna dalam output log. (Ini bukan bidang yang dapat dikonfigurasi) -
enableLatency bool Bidang internal untuk mengaktifkan pengukuran laten di log. (Ini bukan bidang yang dapat dikonfigurasi) -
timeZoneLocation *time.Location Bidang internal untuk lokasi zona waktu. (Ini bukan bidang yang dapat dikonfigurasi) -

Konfigurasi Default

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,
}

Konstanta

// Variabel Logger
const (
    TagPid               = "pid"               	// ID Proses
    TagTime              = "time"              	// Waktu
    TagReferer           = "referer"           	// Pengarah
    TagProtocol          = "protocol"          	// Protokol
    TagPort              = "port"              	// Port
    TagIP                = "ip"                	// Alamat IP
    TagIPs               = "ips"               	// Alamat IP
    TagHost              = "host"              	// Host
    TagMethod            = "method"            	// Metode Permintaan
    TagPath              = "path"              	// Jalur
    TagURL               = "url"               	// URL
    TagUA                = "ua"                	// Agen Pengguna
    TagLatency           = "latency"           	// Latensi
    TagStatus            = "status"            	// Status Respon
    TagResBody           = "resBody"           	// Tubuh Respon
    TagReqHeaders        = "reqHeaders"        	// Header Permintaan
    TagQueryStringParams = "queryParams"       	// Parameter Query
    TagBody              = "body"              	// Tubuh Permintaan
    TagBytesSent         = "bytesSent"         	// Bytes Terkirim
    TagBytesReceived     = "bytesReceived"     	// Bytes Diterima
    TagRoute             = "route"             	// Rute
    TagError             = "error"             	// Error
    // Usang: Gunakan TagReqHeader sebagai gantinya
    TagHeader            = "header:"           	// Header Permintaan
    TagReqHeader         = "reqHeader:"        	// Header Permintaan
    TagRespHeader        = "respHeader:"       	// Header Respon
    TagQuery             = "query:"            	// Kueri
    TagForm              = "form:"             	// Formulir
    TagCookie            = "cookie:"           	// Cookie
    TagLocals            = "locals:"           	// Variabel Lokal
    // Warna
    TagBlack             = "black"             	// Hitam
    TagRed               = "red"               	// Merah
    TagGreen             = "green"             	// Hijau
    TagYellow            = "yellow"            	// Kuning
    TagBlue              = "blue"              	// Biru
    TagMagenta           = "magenta"           	// Magenta
    TagCyan              = "cyan"              	// Cyan
    TagWhite             = "white"             	// Putih
    TagReset             = "reset"             	// Atur Ulang Warna
)