Registro Fiber

Possiamo utilizzare i log per osservare il comportamento del programma, diagnosticare problemi o configurare avvisi corrispondenti. Definire un registro ben strutturato può migliorare l'efficienza della ricerca e agevolare la gestione dei problemi.

Fiber fornisce un modo predefinito per stampare i log sull'output standard. Fornisce anche diverse funzioni globali, come log.Info, log.Errorf e log.Warnw.

Livelli di Log

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

Log Personalizzato

Fiber fornisce l'interfaccia AllLogger per adattarsi a diverse librerie di logging.

type CommonLogger interface {
    Logger
    FormatLogger
    WithLogger
}

type AllLogger interface {
    CommonLogger
    ControlLogger
    WithLogger
}

Stampare i Log

Nota: Chiamare i metodi a livello Fatal interromperà l'esecuzione del programma dopo aver stampato il log. Si prega di usare con cautela. La stampa diretta dei log a livelli diversi verrà inserita nella messageKey e di default è impostata su msg.

log.Info("Ciao, Mondo!")
log.Debug("Stai bene?")
log.Info("42 è la risposta alla vita, all'universo e a tutto")
log.Warn("Siamo sotto attacco!")
log.Error("Houston, abbiamo un problema.")
log.Fatal("Addio, e Grazie per tutto il pesce.")
log.Panic("Il sistema è giù.")

Formattazione e stampa dei log a livelli diversi, tutti i metodi terminano con f.

log.Debugf("Ciao %s", "ragazzo")
log.Infof("%d è la risposta alla vita, all'universo e a tutto", 233)
log.Warnf("Siamo sotto attacco %s!", "capo")
log.Errorf("%s, abbiamo un problema.", "Maestro Shifu")
log.Fatalf("Addio, e Grazie per tutto la %s.", "banana")

Stampa dei messaggi con chiavi e valori. Se le chiavi e i valori non sono abbinati, verrà stampato KEYVALS UNPAIRED.

log.Debugw("", "Ciao", "ragazzo")
log.Infow("", "numero", 233)
log.Warnw("", "lavoro", "capo")
log.Errorw("", "nome", "Maestro Shifu")
log.Fatalw("", "frutto", "banana")

Log Globale

Se si desidera utilizzare solo una semplice funzione di log in un progetto e stamparla globalmente in qualsiasi momento, forniamo un log globale.

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

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

Il codice precedente utilizza il log.DefaultLogger predefinito per l'output standard. È inoltre possibile trovare adattatori già implementati nella cartella contrib, o utilizzare il proprio Logger implementato e impostare il logger globale utilizzando log.SetLogger.

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

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

type customLogger struct {
    stdlog *log.Logger
}

// ...
// Iniettare il logger personalizzato
fiberlog.SetLogger(customLogger)

Impostare il Livello

log.SetLevel imposta i log che sono inferiori a questo livello e non verranno stampati. Il registratore di log predefinito è LevelTrace.

Si noti che questo metodo non è concorrenza sicuro.

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

log.SetLevel(log.LevelInfo)

Impostare l'Output

log.SetOutput imposta la destinazione di output per il logging. Di default, il logger stampa i log sulla console.

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

Imposta la destinazione di output su un file.

// Output sul 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)

Imposta la destinazione di output sia sulla console che su un file.

// Output sul 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)

Collegamento al contesto

Imposta il contesto e utilizza il seguente metodo per restituire un'istanza di CommonLogger collegata al contesto specificato.

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

Nota: Questa è la libreria di logging predefinita per il framework Fiber. Naturalmente, puoi scegliere altre librerie di logging open-source ben note per Go.