📃 日志
我们可以使用日志来观察程序行为、诊断问题或配置相应的告警。定义结构良好的日志可以提高搜索效率,方便处理问题。
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")