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
)