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
)