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.