Registador

Um middleware para o Fiber que é usado para registrar informações detalhadas sobre requisições e respostas HTTP.

Interface

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

Exemplo

Importe o pacote de middleware do framework web Fiber:

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

Observação: A ordem de registro é crucial. Apenas rotas registradas após este middleware serão registradas. Portanto, este middleware deve ser um dos primeiros a ser registrado.

Após inicializar a aplicação Fiber, é possível registrar o middleware das seguintes maneiras:

// Inicializar com configuração padrão
app.Use(logger.New())

// Ou personalizar a configuração
// Registrar IP e porta remotos
app.Use(logger.New(logger.Config{
    Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
}))

// Registrar ID da requisição
app.Use(requestid.New())
app.Use(logger.New(logger.Config{
    // Para mais opções, consulte a seção de Configuração
    Format: "${pid} ${locals:requestid} ${status} - ${method} ${path}\n",
}))

// Alterar fuso horário e formato de tempo
app.Use(logger.New(logger.Config{
    Format:     "${pid} ${status} - ${method} ${path}\n",
    TimeFormat: "02-Jan-2006",
    TimeZone:   "America/New_York",
}))

// Escritor de arquivo personalizado
file, err := os.OpenFile("./123.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
    log.Fatalf("erro ao abrir o arquivo: %v", err)
}
defer file.Close()
app.Use(logger.New(logger.Config{
    Output: file,
}))

// Adicionar tag personalizada
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("Esta é uma tag personalizada")
        },
    },
}))

// Função de retorno de chamada após o registro
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) 
        }
    },
}))

// Desativar cores ao exibir no formato padrão
app.Use(logger.New(logger.Config{
    DisableColors: true,
}))

Configuração

Propriedade Tipo Descrição Valor Padrão
Next func(*fiber.Ctx) bool Next define uma função que ignora o middleware quando retorna verdadeiro. nil
Done func(*fiber.Ctx, []byte) Done é uma função que é chamada após escrever a string de registro da requisição em Output, com a string de registro passada como parâmetro. nil
CustomTags map[string]LogFunc tagFunctions define operações de tag personalizadas. map[string]LogFunc
Format string Format define as tags do registro. [${time}] ${status} - ${latency} ${method} ${path}\n
TimeFormat string TimeFormat define o formato de tempo do carimbo de hora do registro. 15:04:05
TimeZone string TimeZone pode ser especificado como "UTC", "America/New_York", "Asia/Chongqing", etc. "Local"
TimeInterval time.Duration TimeInterval é o tempo de atraso antes de atualizar o carimbo de hora. 500 * time.Millisecond
Output io.Writer Output é um escritor usado para escrever os registros. os.Stdout
DisableColors bool DisableColors define se a saída do registro deve ter cores. false
enableColors bool Campo interno para habilitar cores na saída do registro. (Este não é um campo configurável) -
enableLatency bool Campo interno para habilitar a medição de latência nos registros. (Este não é um campo configurável) -
timeZoneLocation *time.Location Campo interno para a localização do fuso horário. (Este não é um campo configurável) -

Configuração Padrão

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

// Variáveis do Logger
const (
    TagPid               = "pid"               	// ID do Processo
    TagTime              = "time"              	// Tempo
    TagReferer           = "referer"           	// Referência
    TagProtocol          = "protocol"          	// Protocolo
    TagPort              = "port"              	// Porta
    TagIP                = "ip"                	// Endereço IP
    TagIPs               = "ips"               	// Endereços IP
    TagHost              = "host"              	// Host
    TagMethod            = "method"            	// Método da Requisição
    TagPath              = "path"              	// Caminho
    TagURL               = "url"               	// URL
    TagUA                = "ua"                	// Agente do Usuário
    TagLatency           = "latency"           	// Latência
    TagStatus            = "status"            	// Status da Resposta
    TagResBody           = "resBody"           	// Corpo da Resposta
    TagReqHeaders        = "reqHeaders"        	// Cabeçalhos da Requisição
    TagQueryStringParams = "queryParams"       	// Parâmetros da Consulta
    TagBody              = "body"              	// Corpo da Requisição
    TagBytesSent         = "bytesSent"         	// Bytes Enviados
    TagBytesReceived     = "bytesReceived"     	// Bytes Recebidos
    TagRoute             = "route"             	// Rota
    TagError             = "error"             	// Erro
    // Obsoleto: Usar TagReqHeader em vez disso
    TagHeader            = "header:"           	// Cabeçalho da Requisição
    TagReqHeader         = "reqHeader:"        	// Cabeçalho da Requisição
    TagRespHeader        = "respHeader:"       	// Cabeçalho da Resposta
    TagQuery             = "query:"            	// Consulta
    TagForm              = "form:"             	// Formulário
    TagCookie            = "cookie:"           	// Cookie
    TagLocals            = "locals:"           	// Variáveis Locais
    // Cores
    TagBlack             = "black"             	// Preto
    TagRed               = "red"               	// Vermelho
    TagGreen             = "green"             	// Verde
    TagYellow            = "yellow"            	// Amarelo
    TagBlue              = "blue"              	// Azul
    TagMagenta           = "magenta"           	// Magenta
    TagCyan              = "cyan"              	// Ciano
    TagWhite             = "white"             	// Branco
    TagReset             = "reset"             	// Resetar Cor
)