Rejestrator
Middleware dla Fiber, który służy do rejestrowania szczegółowych informacji na temat żądań i odpowiedzi HTTP.
Interfejs
func New(config ...Config) fiber.Handler
Przykład
Import pakietu middleware dla frameworka internetowego Fiber:
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/logger"
)
Uwaga: Kolejność rejestracji jest kluczowa. Tylko trasy zarejestrowane po tym middleware będą rejestrowane. Dlatego ten middleware powinien być jednym z pierwszych, które zostaną zarejestrowane.
Po zainicjowaniu aplikacji Fiber, możliwe jest zarejestrowanie middleware w następujący sposób:
// Inicjalizacja z domyślną konfiguracją
app.Use(logger.New())
// Lub dostosowanie konfiguracji
// Loguj zdalne IP i port
app.Use(logger.New(logger.Config{
Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
}))
// Loguj identyfikator żądania
app.Use(requestid.New())
app.Use(logger.New(logger.Config{
// Dla większej liczby opcji, zobacz sekcję Konfiguracja
Format: "${pid} ${locals:requestid} ${status} - ${method} ${path}\n",
}))
// Zmień strefę czasową i format czasu
app.Use(logger.New(logger.Config{
Format: "${pid} ${status} - ${method} ${path}\n",
TimeFormat: "02-Jan-2006",
TimeZone: "America/New_York",
}))
// Niestandardowy pisarz plików
file, err := os.OpenFile("./123.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
log.Fatalf("błąd otwierania pliku: %v", err)
}
defer file.Close()
app.Use(logger.New(logger.Config{
Output: file,
}))
// Dodaj niestandardowy znacznik
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("To jest niestandardowy znacznik")
},
},
}))
// Funkcja zwrotna po zalogowaniu
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)
}
},
}))
// Wyłącz kolory podczas wypisywania w domyślnym formacie
app.Use(logger.New(logger.Config{
DisableColors: true,
}))
Konfiguracja
Właściwość | Typ | Opis | Wartość domyślna |
---|---|---|---|
Next | func(*fiber.Ctx) bool |
Next definiuje funkcję, która pomija middleware, gdy zwraca true. | nil |
Done | func(*fiber.Ctx, []byte) |
Done to funkcja wywoływana po zapisaniu ciągu dziennika żądania do Output, z ciągiem dziennika przekazanym jako parametr. | nil |
CustomTags | map[string]LogFunc |
tagFunctions definiuje niestandardowe operacje tagów. | map[string]LogFunc |
Format | string |
Format definiuje tagi dziennika. | [${time}] ${status} - ${latency} ${method} ${path}\n |
TimeFormat | string |
TimeFormat definiuje format czasu znacznika czasu dziennika. | 15:04:05 |
TimeZone | string |
TimeZone można określić jako "UTC", "America/New_York", "Asia/Chongqing" itp. | "Local" |
TimeInterval | time.Duration |
TimeInterval to czas opóźnienia przed aktualizacją znacznika czasu. | 500 * time.Millisecond |
Output | io.Writer |
Output to pisarz używany do zapisywania dzienników. | os.Stdout |
DisableColors | bool |
DisableColors definiuje, czy wyjście dziennika powinno być kolorowane. | false |
enableColors | bool |
Pole wewnętrzne do włączania kolorów w wyjściu dziennika. (Nie jest to pole konfigurowalne) | - |
enableLatency | bool |
Pole wewnętrzne do włączenia pomiaru opóźnienia w dziennikach. (Nie jest to pole konfigurowalne) | - |
timeZoneLocation | *time.Location |
Pole wewnętrzne dla lokalizacji strefy czasowej. (Nie jest to pole konfigurowalne) | - |
Domyślna konfiguracja
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,
}
Stałe
// Zmienne loggera
const (
TagPid = "pid" // ID procesu
TagTime = "time" // Czas
TagReferer = "referer" // Odsyłacz
TagProtocol = "protocol" // Protokół
TagPort = "port" // Port
TagIP = "ip" // Adres IP
TagIPs = "ips" // Adresy IP
TagHost = "host" // Host
TagMethod = "method" // Metoda żądania
TagPath = "path" // Ścieżka
TagURL = "url" // URL
TagUA = "ua" // Agent użytkownika
TagLatency = "latency" // Opóźnienie
TagStatus = "status" // Status odpowiedzi
TagResBody = "resBody" // Treść odpowiedzi
TagReqHeaders = "reqHeaders" // Nagłówki żądania
TagQueryStringParams = "queryParams" // Parametry zapytania
TagBody = "body" // Ciało żądania
TagBytesSent = "bytesSent" // Wysłane bajty
TagBytesReceived = "bytesReceived" // Odebrane bajty
TagRoute = "route" // Trasa
TagError = "error" // Błąd
// Zdeprecjonowane: Użyj TagReqHeader zamiast
TagHeader = "header:" // Nagłówek żądania
TagReqHeader = "reqHeader:" // Nagłówek żądania
TagRespHeader = "respHeader:" // Nagłówek odpowiedzi
TagQuery = "query:" // Zapytanie
TagForm = "form:" // Formularz
TagCookie = "cookie:" // Ciasteczko
TagLocals = "locals:" // Zmienne lokalne
// Kolory
TagBlack = "black" // Czarny
TagRed = "red" // Czerwony
TagGreen = "green" // Zielony
TagYellow = "yellow" // Żółty
TagBlue = "blue" // Niebieski
TagMagenta = "magenta" // Magenta
TagCyan = "cyan" // Cyjan
TagWhite = "white" // Biały
TagReset = "reset" // Zresetuj kolor
)