Registro de Fiber

Podemos usar logs para observar o comportamento do programa, diagnosticar problemas ou configurar alertas correspondentes. Definir um registro bem estruturado pode melhorar a eficiência da pesquisa e facilitar o tratamento de problemas.

O Fiber fornece uma maneira padrão de imprimir logs na saída padrão. Também fornece várias funções globais, como log.Info, log.Errorf e log.Warnw.

Níveis de Log

const (
    LevelTrace Nível = iota
    LevelDebug
    LevelInfo
    LevelWarn
    LevelError
    LevelFatal
    LevelPanic
)

Log Personalizado

O Fiber fornece a interface AllLogger para se adaptar a várias bibliotecas de registro.

type CommonLogger interface {
    Logger
    FormatLogger
    WithLogger
}

type AllLogger interface {
    CommonLogger
    ControlLogger
    WithLogger
}

Imprimindo Logs

Nota: Chamar métodos em um nível Fatal irá interromper a execução do programa após imprimir o log. Por favor, use com cautela. Imprimir diretamente logs em diferentes níveis será inserido na messageKey e por padrão está definido como msg.

log.Info("Olá, mundo!")
log.Debug("Você está bem?")
log.Info("42 é a resposta para a vida, o universo e tudo mais")
log.Warn("Estamos sob ataque!")
log.Error("Houston, temos um problema.")
log.Fatal("Até logo, e obrigado pelos peixes.")
log.Panic("O sistema está inativo.")

Formatação e impressão de logs em diferentes níveis, todos os métodos terminam com f.

log.Debugf("Olá %s", "garoto")
log.Infof("%d é a resposta para a vida, o universo e tudo mais", 233)
log.Warnf("Estamos sob ataque %s!", "chefe")
log.Errorf("%s, temos um problema.", "Mestre Shifu")
log.Fatalf("Até logo, e obrigado por todos os %s.", "banana")

Imprimindo mensagens com chaves e valores. Se as chaves e valores não estiverem pareados, será impresso CHAVES E VALORES DESCOMPASSADOS.

log.Debugw("", "Olá", "garoto")
log.Infow("", "número", 233)
log.Warnw("", "trabalho", "chefe")
log.Errorw("", "nome", "Mestre Shifu")
log.Fatalw("", "fruta", "banana")

Registro Global

Se você deseja usar apenas uma função de log simples em um projeto e imprimi-la globalmente a qualquer momento, fornecemos um log global.

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

log.Info("informação")
log.Warn("aviso")

O código acima usa o log.DefaultLogger padrão para a saída padrão. Você também pode encontrar adaptadores já implementados na pasta contrib, ou usar seu próprio Logger implementado e definir o logger global usando log.SetLogger.

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

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

type customLogger struct {
    stdlog *log.Logger
}

// ...
// Injetar logger personalizado
fiberlog.SetLogger(customLogger)

Definir Nível

log.SetLevel define os logs que são inferiores a este nível e não serão exibidos. O gravador de log padrão é LevelTrace.

Por favor, note que este método não é seguro para concorrência.

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

log.SetLevel(log.LevelInfo)

Definir Saída

log.SetOutput define o destino de saída para o registro. Por padrão, o registro imprime logs no console.

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

Definir o destino de saída como um arquivo.

// Saída para o arquivo 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)

Definir o destino de saída tanto para o console quanto para um arquivo.

// Saída para o arquivo 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

Defina o contexto e use o seguinte método para retornar uma instância de CommonLogger vinculada ao contexto especificado.

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

Observação: Esta é a biblioteca de logging padrão para o framework Fiber. Claro, você pode escolher outras bibliotecas de logging de código aberto bem conhecidas em Go.