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
)