跳至主要内容
版本:v2.x

📃 日志

我们可以使用日志来观察程序行为、诊断问题或配置相应的告警。定义一个结构良好的日志可以提高搜索效率并促进问题处理。

Fiber 提供了一种在标准输出中打印日志的默认方式。它还提供了一些全局函数,例如 log.Infolog.Errorflog.Warnw 等。

日志级别

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

自定义日志

Fiber 提供了 AllLogger 接口,用于适配各种日志库。

type CommonLogger interface {
Logger
FormatLogger
WithLogger
}

type AllLogger interface {
CommonLogger
ControlLogger
WithLogger
}

注意:调用 Fatal 级别的方法将在打印日志后中断程序运行,请谨慎使用。直接打印不同级别的日志,它们将被输入到 messageKey 中,默认值为 msg。

log.Info("Hello, World!")
log.Debug("Are you OK?")
log.Info("42 is the answer to life, the universe, and everything")
log.Warn("We are under attack!")
log.Error("Houston, we have a problem.")
log.Fatal("So Long, and Thanks for All the Fislog.")
log.Panic("The system is down.")

格式化并打印不同级别的日志,所有方法都以 f 结尾

log.Debugf("Hello %s", "boy")
log.Infof("%d is the answer to life, the universe, and everything", 233)
log.Warnf("We are under attack %s!", "boss")
log.Errorf("%s, we have a problem.", "Master Shifu")
log.Fatalf("So Long, and Thanks for All the %s.", "banana")

使用键和值打印消息,如果键和值不是一对,则打印 KEYVALS UNPAIRED

log.Debugw("", "Hello", "boy")
log.Infow("", "number", 233)
log.Warnw("", "job", "boss")
log.Errorw("", "name", "Master Shifu")
log.Fatalw("", "fruit", "banana")

全局日志

如果你在一个项目中,只想使用一个简单的日志函数,可以在全局随时打印,我们提供了一个全局日志。

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

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

以上使用默认的 log.DefaultLogger 标准输出。你也可以在 contrib 中找到已实现的适配,或使用你自己的已实现的 Logger 并使用 log.SetLogger 设置全局日志记录器。

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

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

type customLogger struct {
stdlog *log.Logger
}

// ...
// inject your custom logger
fiberlog.SetLogger(customLogger)

设置级别

log.SetLevel 设置日志级别,低于该级别的日志将不会输出。默认记录器是 LevelTrace。

请注意,此方法不是并发安全的

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

log.SetLevel(log.LevelInfo)

设置输出

log.SetOutput 设置记录器的输出目的地。默认记录器在控制台中键入日志。

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

将输出目的地设置为文件。

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

将输出目的地设置为控制台和文件。

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

绑定上下文

设置上下文,使用以下方法将返回一个绑定到指定上下文的 CommonLogger 实例

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