Registrador
Un middleware para Fiber que se utiliza para registrar información detallada sobre las solicitudes y respuestas HTTP.
Interfaz
func New(config ...Config) fiber.Handler
Ejemplo
Importa el paquete de middleware del framework web Fiber:
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/logger"
)
Nota: El orden de registro es crucial. Solo se registrarán las rutas registradas después de este middleware. Por lo tanto, este middleware debe ser uno de los primeros en registrarse.
Después de inicializar la aplicación Fiber, es posible registrar el middleware de las siguientes maneras:
// Inicializar con la configuración predeterminada
app.Use(logger.New())
// O personalizar la configuración
// Registrar IP y puerto remotos
app.Use(logger.New(logger.Config{
Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
}))
// Registrar ID de solicitud
app.Use(requestid.New())
app.Use(logger.New(logger.Config{
// Para más opciones, consulta la sección de Configuración
Format: "${pid} ${locals:requestid} ${status} - ${method} ${path}\n",
}))
// Cambiar zona horaria y formato de hora
app.Use(logger.New(logger.Config{
Format: "${pid} ${status} - ${method} ${path}\n",
TimeFormat: "02-Ene-2006",
TimeZone: "America/Nueva_York",
}))
// Escritor de archivo personalizado
archivo, err := os.OpenFile("./123.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
log.Fatalf("error al abrir el archivo: %v", err)
}
defer archivo.Close()
app.Use(logger.New(logger.Config{
Output: archivo,
}))
// Agregar etiqueta personalizada
app.Use(logger.New(logger.Config{
CustomTags: map[string]logger.LogFunc{
"tag_personalizado": func(output logger.Buffer, c *fiber.Ctx, data *logger.Data, extraParam string) (int, error) {
return output.WriteString("Esta es una etiqueta personalizada")
},
},
}))
// Función de devolución de llamada después del 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)
}
},
}))
// Deshabilitar colores al generar en el formato predeterminado
app.Use(logger.New(logger.Config{
DisableColors: true,
}))
Configuración
Propiedad | Tipo | Descripción | Valor predeterminado |
---|---|---|---|
Next | func(*fiber.Ctx) bool |
Next define una función que omite el middleware cuando devuelve true. | nil |
Done | func(*fiber.Ctx, []byte) |
Done es una función que se llama después de escribir la cadena de registro de la solicitud en Output, con la cadena de registro pasada como parámetro. | nil |
CustomTags | map[string]LogFunc |
tagFunctions define operaciones de etiquetas personalizadas. | map[string]LogFunc |
Format | string |
Format define las etiquetas de registro. | [${time}] ${status} - ${latency} ${method} ${path}\n |
TimeFormat | string |
TimeFormat define el formato de hora del sello de tiempo del registro. | 15:04:05 |
TimeZone | string |
TimeZone se puede especificar como "UTC", "America/Nueva_York", "Asia/Chongqing", etc. | "Local" |
TimeInterval | time.Duration |
TimeInterval es el tiempo de espera antes de actualizar el sello de tiempo. | 500 * time.Millisecond |
Output | io.Writer |
Output es un escritor utilizado para escribir registros. | os.Stdout |
DisableColors | bool |
DisableColors define si la salida del registro debe tener color. | false |
enableColors | bool |
Campo interno para habilitar colores en la salida del registro. (Este no es un campo configurable) | - |
enableLatency | bool |
Campo interno para habilitar la medición de latencia en los registros. (Este no es un campo configurable) | - |
timeZoneLocation | *time.Location |
Campo interno para la ubicación de la zona horaria. (Este no es un campo configurable) | - |
Configuración Predeterminada
var ConfigDefault = Config{
Siguiente: nil,
Hecho: nil,
Formato: "[${time}] ${status} - ${latency} ${method} ${path}\n",
FormatoTiempo: "15:04:05",
ZonaHoraria: "Local",
IntervaloTiempo: 500 * time.Millisecond,
Salida: os.Stdout,
DeshabilitarColores: false,
}
Constantes
// Variables del registro
const (
TagPid = "pid" // Identificador del Proceso
TagTiempo = "time" // Tiempo
TagReferer = "referer" // Referente
TagProtocolo = "protocol" // Protocolo
TagPuerto = "port" // Puerto
TagIP = "ip" // Dirección IP
TagIPs = "ips" // Direcciones IP
TagHost = "host" // Anfitrión
TagMetodo = "method" // Método de Solicitud
TagRuta = "path" // Ruta
TagURL = "url" // URL
TagUA = "ua" // Agente de Usuario
TagLatencia = "latency" // Latencia
TagEstado = "status" // Estado de Respuesta
TagCuerpoRespuesta = "resBody" // Cuerpo de Respuesta
TagEncabezadosSolicitud = "reqHeaders" // Encabezados de la Solicitud
TagParametrosConsulta = "queryParams" // Parámetros de Consulta
TagCuerpoSolicitud = "body" // Cuerpo de la Solicitud
TagBytesEnviados = "bytesSent" // Bytes Enviados
TagBytesRecibidos = "bytesReceived" // Bytes Recibidos
TagRuta = "route" // Ruta
TagError = "error" // Error
// Obsoleto: Usar TagEncabezadoSol en su lugar
TagEncabezado = "header:" // Encabezado de Solicitud
TagEncabezadoSol = "reqHeader:" // Encabezado de Solicitud
TagEncabezadoResp = "respHeader:" // Encabezado de Respuesta
TagConsulta = "query:" // Consulta
TagFormulario = "form:" // Formulario
TagCookie = "cookie:" // Cookie
TagLocales = "locals:" // Variables Locales
// Colores
TagNegro = "black" // Negro
TagRojo = "red" // Rojo
TagVerde = "green" // Verde
TagAmarillo = "yellow" // Amarillo
TagAzul = "blue" // Azul
TagMagenta = "magenta" // Magenta
TagCyan = "cyan" // Cian
TagBlanco = "white" // Blanco
TagReset = "reset" // Restablecer Color
)