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
)