Enregistreur

Un middleware pour Fiber qui est utilisé pour enregistrer des informations détaillées sur les requêtes et les réponses HTTP.

Interface

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

Exemple

Importer le package middleware du framework web Fiber :

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

Remarque : L'ordre d'enregistrement est crucial. Seules les routes enregistrées après ce middleware seront enregistrées. Par conséquent, ce middleware doit être l'un des premiers à être enregistrés.

Après l'initialisation de l'application Fiber, il est possible d'enregistrer le middleware de la manière suivante :

// Initialiser avec une configuration par défaut
app.Use(logger.New())

// Ou personnaliser la configuration
// Enregistrer l'adresse IP et le port distant
app.Use(logger.New(logger.Config{
    Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
}))

// Enregistrer l'ID de requête
app.Use(requestid.New())
app.Use(logger.New(logger.Config{
    // Pour plus d'options, voir la section Config
    Format: "${pid} ${locals:requestid} ${status} - ${method} ${path}\n",
}))

// Changer le fuseau horaire et le format de l'heure
app.Use(logger.New(logger.Config{
    Format:     "${pid} ${status} - ${method} ${path}\n",
    TimeFormat: "02-Jan-2006",
    TimeZone:   "America/New_York",
}))

// Écrivain de fichier personnalisé
file, err := os.OpenFile("./123.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
    log.Fatalf("erreur lors de l'ouverture du fichier : %v", err)
}
defer file.Close()
app.Use(logger.New(logger.Config{
    Output: file,
}))

// Ajouter une balise personnalisée
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("Ceci est une balise personnalisée")
        },
    },
}))

// Fonction de rappel après l'enregistrement
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) 
        }
    },
}))

// Désactiver les couleurs lors de la sortie dans le format par défaut
app.Use(logger.New(logger.Config{
    DisableColors: true,
}))

Configuration

Propriété Type Description Valeur par défaut
Next func(*fiber.Ctx) bool Next définit une fonction qui ignore le middleware lorsqu'elle retourne true. nil
Done func(*fiber.Ctx, []byte) Done est une fonction qui est appelée après l'écriture de la chaîne de journal de la requête dans Output, la chaîne de journal étant passée en paramètre. nil
CustomTags map[string]LogFunc tagFunctions définit des opérations de balises personnalisées. map[string]LogFunc
Format string Format définit les balises de journal. [${time}] ${status} - ${latency} ${method} ${path}\n
TimeFormat string TimeFormat définit le format de l'heure du timestamp du journal. 15:04:05
TimeZone string TimeZone peut être spécifié comme "UTC", "America/New_York", "Asia/Chongqing", etc. "Local"
TimeInterval time.Duration TimeInterval est le délai avant la mise à jour du timestamp. 500 * time.Millisecond
Output io.Writer Output est un écrivain utilisé pour écrire les journaux. os.Stdout
DisableColors bool DisableColors définit si la sortie du journal doit être colorée. false
enableColors bool Champ interne pour activer les couleurs dans la sortie du journal. (Ce champ n'est pas configurable) -
enableLatency bool Champ interne pour activer la mesure de la latence dans les journaux. (Ce champ n'est pas configurable) -
timeZoneLocation *time.Location Champ interne pour l'emplacement du fuseau horaire. (Ce champ n'est pas configurable) -

Configuration par défaut

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

Constantes

// Variables du journal
const (
    TagPid               = "pid"               	// Identifiant du processus
    TagTime              = "time"              	// Heure
    TagReferer           = "referer"           	// Référent
    TagProtocol          = "protocol"          	// Protocole
    TagPort              = "port"              	// Port
    TagIP                = "ip"                	// Adresse IP
    TagIPs               = "ips"               	// Adresses IP
    TagHost              = "host"              	// Hôte
    TagMethod            = "method"            	// Méthode de la requête
    TagPath              = "path"              	// Chemin
    TagURL               = "url"               	// URL
    TagUA                = "ua"                	// Agent utilisateur
    TagLatency           = "latency"           	// Latence
    TagStatus            = "status"            	// Statut de la réponse
    TagResBody           = "resBody"           	// Corps de la réponse
    TagReqHeaders        = "reqHeaders"        	// En-têtes de la requête
    TagQueryStringParams = "queryParams"       	// Paramètres de la requête
    TagBody              = "body"              	// Corps de la requête
    TagBytesSent         = "bytesSent"         	// Octets envoyés
    TagBytesReceived     = "bytesReceived"     	// Octets reçus
    TagRoute             = "route"             	// Route
    TagError             = "error"             	// Erreur
    // Obsolète : Utiliser TagReqHeader à la place
    TagHeader            = "head:"             	// En-tête de la requête
    TagReqHeader         = "reqHead:"          	// En-tête de la requête
    TagRespHeader        = "respHead:"         	// En-tête de la réponse
    TagQuery             = "query:"            	// Requête
    TagForm              = "form:"             	// Formulaire
    TagCookie            = "cookie:"           	// Cookie
    TagLocals            = "locals:"           	// Variables locales
    // Couleurs
    TagBlack             = "noir"              	// Noir
    TagRed               = "rouge"             	// Rouge
    TagGreen             = "vert"              	// Vert
    TagYellow            = "jaune"             	// Jaune
    TagBlue              = "bleu"              	// Bleu
    TagMagenta           = "magenta"           	// Magenta
    TagCyan              = "cyan"              	// Cyan
    TagWhite             = "blanc"             	// Blanc
    TagReset             = "réinitialiser"      	// Réinitialiser la couleur
)