📃 日志
我们可以使用日志来观察程序行为、诊断问题或配置相应的告警。定义一个结构良好的日志可以提高搜索效率并促进问题处理。
Fiber 提供了一种在标准输出中打印日志的默认方式。它还提供了一些全局函数,例如 log.Info
、log.Errorf
、log.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")