Logger

Un middleware per Fiber che viene utilizzato per registrare informazioni dettagliate sulle richieste e sulle risposte HTTP.

Interfaccia

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

Esempio

Importa il pacchetto middleware del framework web Fiber:

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

Nota: L'ordine di registrazione è cruciale. Solo le route registrate dopo questo middleware saranno registrate. Pertanto, questo middleware dovrebbe essere uno dei primi ad essere registrato.

Dopo aver inizializzato l'applicazione Fiber, è possibile registrare il middleware nei seguenti modi:

// Inizializza con la configurazione predefinita
app.Use(logger.New())

// Oppure personalizza la configurazione
// Registra IP e porta remote
app.Use(logger.New(logger.Config{
    Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
}))

// Registra l'ID della richiesta
app.Use(requestid.New())
app.Use(logger.New(logger.Config{
    // Per ulteriori opzioni, vedere la sezione Config
    Format: "${pid} ${locals:requestid} ${status} - ${method} ${path}\n",
}))

// Cambia fuso orario e formato dell'ora
app.Use(logger.New(logger.Config{
    Format:     "${pid} ${status} - ${method} ${path}\n",
    TimeFormat: "02-gen-2006",
    TimeZone:   "America/New_York",
}))

// Scrittore di file personalizzato
file, err := os.OpenFile("./123.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
    log.Fatalf("errore durante l'apertura del file: %v", err)
}
defer file.Close()
app.Use(logger.New(logger.Config{
    Output: file,
}))

// Aggiungi tag personalizzato
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("Questo è un tag personalizzato")
        },
    },
}))

// Funzione di callback dopo il log
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) 
        }
    },
}))

// Disabilita i colori durante l'output nel formato predefinito
app.Use(logger.New(logger.Config{
    DisableColors: true,
}))

Configurazione

Proprietà Tipo Descrizione Valore predefinito
Next func(*fiber.Ctx) bool Next definisce una funzione che salta il middleware quando restituisce true. nil
Done func(*fiber.Ctx, []byte) Done è una funzione che viene chiamata dopo aver scritto la stringa di log della richiesta su Output, con la stringa di log passata come parametro. nil
CustomTags map[string]LogFunc tagFunctions definisce operazioni di tag personalizzate. map[string]LogFunc
Format string Format definisce i tag di log. [${time}] ${status} - ${latency} ${method} ${path}\n
TimeFormat string TimeFormat definisce il formato dell'ora del timestamp del log. 15:04:05
TimeZone string TimeZone può essere specificato come "UTC", "America/New_York", "Asia/Chongqing", ecc. "Local"
TimeInterval time.Duration TimeInterval è il tempo di attesa prima dell'aggiornamento del timestamp. 500 * time.Millisecond
Output io.Writer Output è un writer usato per scrivere i log. os.Stdout
DisableColors bool DisableColors definisce se l'output del log dovrebbe essere colorato. false
enableColors bool Campo interno per abilitare i colori nell'output del log. (Questo non è un campo configurabile) -
enableLatency bool Campo interno per abilitare la misurazione della latenza nei log. (Questo non è un campo configurabile) -
timeZoneLocation *time.Location Campo interno per la posizione del fuso orario. (Questo non è un campo configurabile) -

Configurazione predefinita

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

Costanti

// Variabili di registrazione
const (
    TagPid               = "pid"               	// ID Processo
    TagTime              = "time"              	// Tempo
    TagReferer           = "referer"           	// Riferimento
    TagProtocol          = "protocol"          	// Protocollo
    TagPort              = "port"              	// Porta
    TagIP                = "ip"                	// Indirizzo IP
    TagIPs               = "ips"               	// Indirizzi IP
    TagHost              = "host"              	// Host
    TagMethod            = "method"            	// Metodo di richiesta
    TagPath              = "path"              	// Percorso
    TagURL               = "url"               	// URL
    TagUA                = "ua"                	// User Agent
    TagLatency           = "latency"           	// Latency
    TagStatus            = "status"            	// Stato di risposta
    TagResBody           = "resBody"           	// Corpo della risposta
    TagReqHeaders        = "reqHeaders"        	// Intestazioni della richiesta
    TagQueryStringParams = "queryParams"       	// Parametri di query
    TagBody              = "body"              	// Corpo della richiesta
    TagBytesSent         = "bytesSent"         	// Byte inviati
    TagBytesReceived     = "bytesReceived"     	// Byte ricevuti
    TagRoute             = "route"             	// Percorso
    TagError             = "error"             	// Errore
    // Obsoleto: Utilizzare TagReqHeader al suo posto
    TagHeader            = "header:"           	// Intestazione della richiesta
    TagReqHeader         = "reqHeader:"        	// Intestazione della richiesta
    TagRespHeader        = "respHeader:"       	// Intestazione di risposta
    TagQuery             = "query:"            	// Query
    TagForm              = "form:"             	// Modulo
    TagCookie            = "cookie:"           	// Cookie
    TagLocals            = "locals:"           	// Variabili locali
    // Colori
    TagBlack             = "black"             	// Nero
    TagRed               = "red"               	// Rosso
    TagGreen             = "green"             	// Verde
    TagYellow            = "yellow"            	// Giallo
    TagBlue              = "blue"              	// Blu
    TagMagenta           = "magenta"           	// Magenta
    TagCyan              = "cyan"              	// Ciano
    TagWhite             = "white"             	// Bianco
    TagReset             = "reset"             	// Ripristina colore
)