Registro de Fiber

Podemos usar registros para observar el comportamiento del programa, diagnosticar problemas o configurar alertas correspondientes. Definir un registro bien estructurado puede mejorar la eficiencia de búsqueda y facilitar el manejo de problemas.

Fiber proporciona una forma predeterminada de imprimir registros en la salida estándar. También proporciona varias funciones globales, como log.Info, log.Errorf y log.Warnw.

Niveles de registro

const (
    LevelTrace Level = iota
    LevelDebug
    LevelInfo
    LevelWarn
    LevelError
    LevelFatal
    LevelPanic
)

Registro personalizado

Fiber proporciona la interfaz AllLogger para adaptarse a diversas bibliotecas de registro.

type CommonLogger interface {
    Logger
    FormatLogger
    WithLogger
}

type AllLogger interface {
    CommonLogger
    ControlLogger
    WithLogger
}

Impresión de registros

Nota: Llamar a los métodos en un nivel Fatal interrumpirá la ejecución del programa después de imprimir el registro. Por favor, úselo con cautela. La impresión directa de registros en diferentes niveles se introducirá en el messageKey y por defecto se establecerá en msg.

log.Info("¡Hola, Mundo!")
log.Debug("¿Estás bien?")
log.Info("42 es la respuesta a la vida, el universo y todo")
log.Warn("¡Estamos bajo ataque!")
log.Error("Houston, tenemos un problema.")
log.Fatal("Hasta pronto, y gracias por todo el pescado.")
log.Panic("El sistema está caído.")

Formato e impresión de registros en diferentes niveles, todos los métodos terminan con f.

log.Debugf("Hola %s", "chico")
log.Infof("%d es la respuesta a la vida, el universo y todo", 233)
log.Warnf("¡Estamos bajo ataque %s!", "jefe")
log.Errorf("%s, tenemos un problema.", "Maestro Shifu")
log.Fatalf("Hasta pronto, y gracias por todo el %s.", "plátano")

Impresión de mensajes con claves y valores. Si las claves y valores no están emparejados, se imprimirá KEYVALS UNPAIRED.

log.Debugw("", "Hola", "chico")
log.Infow("", "número", 233)
log.Warnw("", "trabajo", "jefe")
log.Errorw("", "nombre", "Maestro Shifu")
log.Fatalw("", "fruta", "plátano")

Registro global

Si solo deseas usar una función de registro simple en un proyecto e imprimirla globalmente en cualquier momento, proporcionamos un registro global.

import "github.com/gofiber/fiber/v2/log"

log.Info("info")
log.Warn("advertencia")

El código anterior utiliza el log.DefaultLogger predeterminado para la salida estándar. También puedes encontrar adaptadores implementados en la carpeta contrib, o usar tu propio Logger implementado y establecer el registro global usando log.SetLogger.

import (
    "log"
    fiberlog "github.com/gofiber/fiber/v2/log"
)

var _ log.AllLogger = (*customLogger)(nil)

type customLogger struct {
    stdlog *log.Logger
}

// ...
// Inyectar un registro personalizado
fiberlog.SetLogger(customLogger)

Establecer nivel

log.SetLevel establece los registros que son más bajos que este nivel y no se emitirán. El registro de registro predeterminado es LevelTrace.

Ten en cuenta que este método no es seguro para la concurrencia.

import "github.com/gofiber/fiber/v2/log"

log.SetLevel(log.LevelInfo)

Establecer salida

log.SetOutput establece el destino de salida para el registro. Por defecto, el registro se imprime en la consola.

var logger AllLogger = &defaultLogger{
    stdlog: log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile|log.Lmicroseconds),
    depth:  4,
}

Establecer el destino de salida a un archivo.

// Salida al archivo test.log
f, err := os.OpenFile("test.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
    return
}
log.SetOutput(f)

Establecer el destino de salida tanto a la consola como a un archivo.

// Salida al archivo test.log
file, _ := os.OpenFile("test.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
iw := io.MultiWriter(os.Stdout, file)
log.SetOutput(iw)

Vincular contexto

Establezca el contexto y utilice el siguiente método para devolver una instancia de CommonLogger vinculada al contexto especificado.

commonLogger := log.WithContext(ctx)
commonLogger.Info("info")

Nota: Esta es la biblioteca de registro predeterminada para el marco de trabajo Fiber. Por supuesto, puedes elegir otras bibliotecas de registro de código abierto bien conocidas para Go.