Fiber Log

Kita dapat menggunakan log untuk mengamati perilaku dari program, mendiagnosis isu, atau mengonfigurasi pemberitahuan yang sesuai. Mendefinisikan log yang terstruktur dengan baik dapat meningkatkan efisiensi pencarian dan memudahkan penanganan masalah.

Fiber menyediakan cara default untuk mencetak log ke output standar. Ini juga menyediakan beberapa fungsi global, seperti log.Info, log.Errorf, dan log.Warnw.

Tingkatan Log

const (
    LevelTrace Level = iota
    LevelDebug
    LevelInfo
    LevelWarn
    LevelError
    LevelFatal
    LevelPanic
)

Log Kustom

Fiber menyediakan antarmuka AllLogger untuk beradaptasi dengan berbagai library logging.

type CommonLogger interface {
    Logger
    FormatLogger
    WithLogger
}

type AllLogger interface {
    CommonLogger
    ControlLogger
    WithLogger
}

Mencetak Log

Catatan: Memanggil metode pada tingkat Fatal akan menghentikan eksekusi program setelah mencetak log. Harap gunakan dengan hati-hati. Mencetak log langsung pada tingkatan yang berbeda akan dimasukkan ke dalam messageKey dan secara default diatur ke msg.

log.Info("Halo, Dunia!")
log.Debug("Apakah kamu baik?")
log.Info("42 adalah jawaban atas kehidupan, alam semesta, dan segala-galanya")
log.Warn("Kita sedang diserang!")
log.Error("Houston, kita memiliki masalah.")
log.Fatal("Selamat Tinggal dan Terima Kasih untuk Semua Ikan")
log.Panic("Sistem sedang down.")

Memformat dan mencetak log pada tingkatan yang berbeda, semua metode diakhiri dengan f.

log.Debugf("Halo %s", "teman")
log.Infof("%d adalah jawaban atas kehidupan, alam semesta, dan segala-galanya", 233)
log.Warnf("Kita sedang diserang %s!", "bos")
log.Errorf("%s, kita memiliki masalah.", "Master Shifu")
log.Fatalf("Selamat Tinggal dan Terima Kasih untuk Semua %s.", "buah-buahan")

Mencetak pesan dengan kunci dan nilai. Jika kunci dan nilai tidak dipasangkan, KEYVALS UNPAIRED akan dicetak.

log.Debugw("", "Halo", "teman")
log.Infow("", "angka", 233)
log.Warnw("", "pekerjaan", "bos")
log.Errorw("", "nama", "Master Shifu")
log.Fatalw("", "buah", "buah-buahan")

Log Global

Jika Anda hanya ingin menggunakan fungsi log sederhana dalam sebuah proyek dan mencetaknya secara global kapan saja, kami menyediakan log global.

import "github.com/gofiber/fiber/v2/log"

log.Info("info")
log.Warn("peringatan")

Kode di atas menggunakan log.DefaultLogger default untuk output standar. Anda juga dapat menemukan adapter yang sudah diimplementasikan di folder contrib, atau menggunakan Logger yang sudah Anda implementasikan sendiri dan atur logger global menggunakan log.SetLogger.

import (
    "log"
    fiberlog "github.com/gofiber/fiber/v2/log"
)

var _ log.AllLogger = (*customLogger)(nil)

type customLogger struct {
    stdlog *log.Logger
}

// ...
// Suntikkan logger kustom
fiberlog.SetLogger(customLogger)

Set Tingkatan

log.SetLevel mengatur tingkatan log yang lebih rendah dari tingkatan ini dan tidak akan dicetak. Perekam log default adalah LevelTrace.

Harap dicatat bahwa metode ini tidak aman untuk konkurensi.

import "github.com/gofiber/fiber/v2/log"

log.SetLevel(log.LevelInfo)

Set Output

log.SetOutput mengatur tujuan output untuk logging. Secara default, logger mencetak log ke konsol.

var logger AllLogger = &defaultLogger{
    stdlog: log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile|log.Lmicroseconds),
    depth:  4,
}

Atur tujuan output ke file.

// Output ke file test.log
f, err := os.OpenFile("test.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
    return
}
log.SetOutput(f)

Atur tujuan output ke konsol dan file sekaligus.

// Output ke file test.log
file, _ := os.OpenFile("test.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
iw := io.MultiWriter(os.Stdout, file)
log.SetOutput(iw)

Ikatan Konteks

Tetapkan konteks, dan gunakan metode berikut untuk mengembalikan instansi CommonLogger yang terikat ke konteks yang spesifik.

commonLogger := log.WithContext(ctx)
commonLogger.Info("info")

Catatan: Ini adalah pustaka logging default untuk framework Fiber. Tentu saja, Anda dapat memilih pustaka logging open-source Go lain yang terkenal.