Fiber Günlüğü

Programın davranışını gözlemlemek, sorunları teşhis etmek veya ilgili uyarıları yapılandırmak için günlükleri kullanabiliriz. İyi bir yapıya sahip bir günlük tanımlamak, arama verimliliğini artırabilir ve problem çözümünü kolaylaştırabilir.

Fiber, günlükleri standart çıktıya yazdırmak için varsayılan bir yol sağlar. Ayrıca log.Info, log.Errorf ve log.Warnw gibi birkaç global fonksiyon da sağlar.

Günlük Seviyeleri

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

Özel Günlük

Fiber, çeşitli günlükleme kütüphanelerine uyum sağlamak için AllLogger arayüzünü sağlar.

type CommonLogger interface {
    Logger
    FormatLogger
    WithLogger
}

type AllLogger interface {
    CommonLogger
    ControlLogger
    WithLogger
}

Günlükleri Yazdırma

Not: Fatal seviyesindeki yöntemleri çağırmak, günlüğü yazdırdıktan sonra programın çalışmasını durduracaktır. Lütfen dikkatlice kullanın. Farklı seviyelerde doğrudan günlük yazdırmak, varsayılan olarak msg olarak ayarlanmış olan messageKey'e girecektir.

log.Info("Merhaba, Dünya!")
log.Debug("İyi misin?")
log.Info("42, hayatın, evrenin ve her şeyin cevabıdır")
log.Warn("Saldırı altındayız!")
log.Error("Houston, bir sorunumuz var.")
log.Fatal("Uzun ve Sağlıcakla, ve Bütün Balıklar için Teşekkürler.")
log.Panic("Sistem çöktü.")

Farklı seviyelerdeki günlükleri biçimlendirme ve yazdırma, tüm yöntemler f ile biter.

log.Debugf("Merhaba %s", "çocuk")
log.Infof("%d, hayatın, evrenin ve her şeyin cevabıdır", 233)
log.Warnf("Saldırı altındayız %s!", "patron")
log.Errorf("%s, bir sorunumuz var.", "Usta Şifu")
log.Fatalf("Uzun ve Sağlıcakla, ve Bütün %s için Teşekkürler.", "muz")

Anahtarlar ve değerlerle mesajları yazdırma. Eğer anahtarlar ve değerler eşleşmiyorsa, KEYVALS UNPAIRED yazdırılacaktır.

log.Debugw("", "Merhaba", "çocuk")
log.Infow("", "sayı", 233)
log.Warnw("", "iş", "patron")
log.Errorw("", "isim", "Usta Şifu")
log.Fatalw("", "meyve", "muz")

Global Günlük

Bir projede yalnızca basit bir günlük işlevi kullanmak ve her zaman global olarak yazdırmak istiyorsanız, global bir günlük sağlarız.

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

log.Info("bilgi")
log.Warn("uyarı")

Yukarıdaki kod, standart çıktı için varsayılan log.DefaultLogger'ı kullanır. Ayrıca contrib klasöründe zaten uygulanmış adaptörleri bulabilir veya kendi uyguladığınız Logger'ı kullanarak ve log.SetLogger kullanarak global günlüğü ayarlayabilirsiniz.

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

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

type customLogger struct {
    stdlog *log.Logger
}

// ...
// Özel günlüğü enjekte et
fiberlog.SetLogger(customLogger)

Seviye Ayarlama

log.SetLevel, bu seviyeden düşük olan günlükleri ayarlar ve çıktıya yazdırmaz. Varsayılan günlük kaydedici LevelTrace'dir.

Lütfen bu yöntemin eşzamanlı güvenli olmadığını unutmayın.

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

log.SetLevel(log.LevelInfo)

Çıktı Ayarlama

log.SetOutput, günlük için çıkış hedefini ayarlar. Varsayılan olarak, günlükçü günlükleri konsola yazdırır.

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

Çıkış hedefini bir dosyaya ayarlama.

// test.log dosyasına çıktı
f, err := os.OpenFile("test.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
    return
}
log.SetOutput(f)

Çıkış hedefini hem konsola hem de bir dosyaya ayarlama.

// test.log dosyasına çıktı
dosya, _ := os.OpenFile("test.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
iw := io.MultiWriter(os.Stdout, dosya)
log.SetOutput(iw)

Bağlamı Bağla

Bağlamı ayarlayın ve belirtilen bağlama bağlı bir CommonLogger örneğini döndürmek için aşağıdaki yöntemi kullanın.

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

Not: Bu, Fiber çerçevesi için varsayılan günlükleme kütüphanesidir. Tabii ki, diğer bilinen Go açık kaynaklı günlükleme kütüphanelerini de seçebilirsiniz.