Dziennik włókien
Możemy wykorzystać dzienniki do obserwowania zachowania programu, diagnostyki problemów lub konfiguracji odpowiednich alertów. Definiowanie dobrze zorganizowanego dziennika może poprawić wydajność wyszukiwania i ułatwić rozwiązywanie problemów.
Fiber zapewnia domyślny sposób drukowania dzienników do standardowego wyjścia. Zapewnia również kilka funkcji globalnych, takich jak log.Info
, log.Errorf
i log.Warnw
.
Poziomy dziennika
const (
LevelTrace Level = iota
LevelDebug
LevelInfo
LevelWarn
LevelError
LevelFatal
LevelPanic
)
Dostosowany dziennik
Fiber zapewnia interfejs AllLogger
, aby dostosować się do różnych bibliotek do logowania.
type CommonLogger interface {
Logger
FormatLogger
WithLogger
}
type AllLogger interface {
CommonLogger
ControlLogger
WithLogger
}
Drukowanie dzienników
Uwaga: Wywołanie metod na poziomie Fatal
przerwie wykonanie programu po wydrukowaniu dziennika. Proszę używać ostrożnie. Bezpośrednie drukowanie dzienników na różnych poziomach zostanie wprowadzone do messageKey
i domyślnie ustawione na msg
.
log.Info("Cześć, Świecie!")
log.Debug("Czy wszystko w porządku?")
log.Info("42 to odpowiedź na pytanie o życie, wszechświat i całą resztę")
log.Warn("Jesteśmy atakowani!")
log.Error("Houston, mamy problem.")
log.Fatal("Do zobaczenia, i dzięki za wszystkie ryby.")
log.Panic("System jest wyłączony.")
Formatowanie i drukowanie dzienników na różnych poziomach, wszystkie metody kończą się na f
.
log.Debugf("Cześć %s", "chłopcze")
log.Infof("%d to odpowiedź na pytanie o życie, wszechświat i całą resztę", 233)
log.Warnf("Jesteśmy atakowani %s!", "szefie")
log.Errorf("%s, mamy problem.", "Mistrzu Shifu")
log.Fatalf("Do zobaczenia, i dzięki za wszystkie %s.", "banany")
Drukowanie wiadomości z kluczami i wartościami. Jeśli klucze i wartości nie są sparowane, zostanie wydrukowane KEYVALS UNPAIRED
.
log.Debugw("", "Cześć", "chłopcze")
log.Infow("", "numer", 233)
log.Warnw("", "praca", "szef")
log.Errorw("", "imię", "Mistrz Shifu")
log.Fatalw("", "owoc", "banan")
Globalny dziennik
Jeśli chcesz używać tylko prostych funkcji dziennika w projekcie i drukować go globalnie w dowolnym momencie, udostępniamy globalny dziennik.
import "github.com/gofiber/fiber/v2/log"
log.Info("info")
log.Warn("ostrzeżenie")
Powyższy kod wykorzystuje domyślny log.DefaultLogger
do standardowego wyjścia. Można również znaleźć już zaimplementowane adaptery w folderze contrib
, lub użyć własnego zaimplementowanego Logger
i ustawić globalny dziennik za pomocą log.SetLogger
.
import (
"log"
fiberlog "github.com/gofiber/fiber/v2/log"
)
var _ log.AllLogger = (*customLogger)(nil)
type customLogger struct {
stdlog *log.Logger
}
// ...
// Wstrzyknięcie niestandardowego dziennika
fiberlog.SetLogger(customLogger)
Ustawianie Poziomu
log.SetLevel
ustawia poziomy dzienników niższe od tego poziomu i nie będą wyświetlane. Domyślny rejestrator dziennika to LevelTrace
.
Proszę zauważyć, że ta metoda nie jest bezpieczna przy wielowątkowości.
import "github.com/gofiber/fiber/v2/log"
log.SetLevel(log.LevelInfo)
Ustawianie Wyjścia
log.SetOutput
ustawia miejsce docelowe wyjścia dla logowania. Domyślnie dziennik drukuje logi do konsoli.
var logger AllLogger = &defaultLogger{
stdlog: log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile|log.Lmicroseconds),
depth: 4,
}
Ustaw miejsce docelowe wyjścia na plik.
// Wyjście do pliku 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)
Ustaw miejsce docelowe wyjścia zarówno dla konsoli, jak i pliku.
// Wyjście do pliku 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)
Powiąż Kontekst
Ustaw kontekst i użyj następującej metody, aby zwrócić instancję CommonLogger
powiązaną z określonym kontekstem.
commonLogger := log.WithContext(ctx)
commonLogger.Info("info")
Uwaga: Jest to domyślna biblioteka logowania dla platformy Fiber. Oczywiście możesz wybrać inne znane biblioteki logowania open-source w języku Go.