Logger

Ein Middleware für Fiber, die dazu dient, detaillierte Informationen über HTTP-Anfragen und -Antworten zu protokollieren.

Schnittstelle

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

Beispiel

Importieren Sie das Middleware-Paket des Fiber-Web-Frameworks:

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

Hinweis: Die Registrierungsreihenfolge ist entscheidend. Nur Routen, die nach diesem Middleware registriert sind, werden protokolliert. Daher sollte dieses Middleware eine der ersten sein, die registriert wird.

Nach der Initialisierung der Fiber-Anwendung kann das Middleware auf folgende Weise registriert werden:

// Mit Standardeinstellungen initialisieren
app.Use(logger.New())

// Oder die Konfiguration anpassen
// Remote-IP und -Port protokollieren
app.Use(logger.New(logger.Config{
    Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
}))

// Anfrage-ID protokollieren
app.Use(requestid.New())
app.Use(logger.New(logger.Config{
    // Weitere Optionen siehe Abschnitt Config
    Format: "${pid} ${locals:requestid} ${status} - ${method} ${path}\n",
}))

// Zeitzone und Zeitformat ändern
app.Use(logger.New(logger.Config{
    Format:     "${pid} ${status} - ${method} ${path}\n",
    TimeFormat: "02-Jan-2006",
    TimeZone:   "America/New_York",
}))

// Benutzerdefinierten Dateischreiber hinzufügen
file, err := os.OpenFile("./123.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
    log.Fatalf("Fehler beim Öffnen der Datei: %v", err)
}
defer file.Close()
app.Use(logger.New(logger.Config{
    Output: file,
}))

// Benutzerdefiniertes Tag hinzufügen
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("Dies ist ein benutzerdefinierter Tag")
        },
    },
}))

// Rückruffunktion nach Protokollierung
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) 
        }
    },
}))

// Farben deaktivieren beim Ausgeben im Standardformat
app.Use(logger.New(logger.Config{
    DisableColors: true,
}))

Konfiguration

Eigenschaft Typ Beschreibung Standardwert
Next func(*fiber.Ctx) bool Next definiert eine Funktion, die das Middleware überspringt, wenn sie true zurückgibt. nil
Done func(*fiber.Ctx, []byte) Done ist eine Funktion, die nach dem Schreiben des Protokollstrings der Anfrage an Output aufgerufen wird, wobei der Protokollstring als Parameter übergeben wird. nil
CustomTags map[string]LogFunc tagFunctions definiert benutzerdefinierte Tag-Operationen. map[string]LogFunc
Format string Format definiert die Protokollmarken. [${time}] ${status} - ${latency} ${method} ${path}\n
TimeFormat string TimeFormat definiert das Zeitformat des Protokollzeitstempels. 15:04:05
TimeZone string Zeitzone kann als "UTC", "America/New_York", "Asia/Chongqing", usw. angegeben werden. "Local"
TimeInterval time.Duration TimeInterval ist die Verzögerungszeit vor dem Aktualisieren des Zeitstempels. 500 * time.Millisecond
Output io.Writer Output ist ein Schreiber, der zum Schreiben von Protokollen verwendet wird. os.Stdout
DisableColors bool DisableColors definiert, ob die Protokollausgabe farbig sein soll. false
enableColors bool Internes Feld zur Aktivierung von Farben in der Protokollausgabe. (Dies ist kein konfigurierbares Feld.) -
enableLatency bool Internes Feld zur Messung der Latenz in Protokollen. (Dies ist kein konfigurierbares Feld.) -
timeZoneLocation *time.Location Internes Feld für den Zeitzonenstandort. (Dies ist kein konfigurierbares Feld.) -

Standardkonfiguration

var ConfigDefault = Config{
    Next:          nil,
    Done:          nil,
    Format:        "[${time}] ${status} - ${latency} ${method} ${path}\n",
    TimeFormat:    "15:04:05",
    TimeZone:      "Lokal",
    TimeInterval:  500 * time.Millisecond,
    Output:        os.Stdout,
    DisableColors: false,
}

Konstanten

// Logger-Variablen
const (
    TagPid               = "pid"               // Prozess-ID
    TagTime              = "time"              // Zeit
    TagReferer           = "referer"           // Referrer
    TagProtocol          = "protocol"          // Protokoll
    TagPort              = "port"              // Port
    TagIP                = "ip"                // IP-Adresse
    TagIPs               = "ips"               // IP-Adressen
    TagHost              = "host"              // Host
    TagMethod            = "method"            // Anfragemethode
    TagPath              = "path"              // Pfad
    TagURL               = "url"               // URL
    TagUA                = "ua"                // Benutzer-Agent
    TagLatency           = "latency"           // Latenz
    TagStatus            = "status"            // Antwortstatus
    TagResBody           = "resBody"           // Antwortkörper
    TagReqHeaders        = "reqHeaders"        // Anfrage-Header
    TagQueryStringParams = "queryParams"       // Abfrageparameter
    TagBody              = "body"              // Anfragekörper
    TagBytesSent         = "bytesSent"         // Übertragene Bytes
    TagBytesReceived     = "bytesReceived"     // Empfangene Bytes
    TagRoute             = "route"             // Route
    TagError             = "error"             // Fehler
    // Veraltet: Verwenden Sie TagReqHeader stattdessen
    TagHeader            = "header:"           // Anfrage-Header
    TagReqHeader         = "reqHeader:"        // Anfrage-Header
    TagRespHeader        = "respHeader:"       // Antwort-Header
    TagQuery             = "query:"            // Abfrage
    TagForm              = "form:"             // Formular
    TagCookie            = "cookie:"           // Cookie
    TagLocals            = "locals:"           // Lokale Variablen
    // Farben
    TagBlack             = "black"             // Schwarz
    TagRed               = "rot"               // Rot
    TagGreen             = "grün"              // Grün
    TagYellow            = "gelb"              // Gelb
    TagBlue              = "blau"              // Blau
    TagMagenta           = "magenta"           // Magenta
    TagCyan              = "cyan"              // Cyan
    TagWhite             = "weiß"              // Weiß
    TagReset             = "zurücksetzen"      // Farbe zurücksetzen
)