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
)