基本使用
Zap 是 Uber 开源的高性能日志库。
创建 Logger
预设 Logger
go
package main
import (
"go.uber.org/zap"
)
func main() {
logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("hello zap",
zap.String("key", "value"),
zap.Int("count", 42),
)
}开发环境 Logger
go
logger, _ := zap.NewDevelopment()
logger.Info("开发日志",
zap.String("env", "dev"),
)示例环境 Logger
go
logger := zap.NewExample()
logger.Info("示例日志")日志级别
支持的日志级别
go
logger.Debug("调试信息")
logger.Info("普通信息")
logger.Warn("警告信息")
logger.Error("错误信息")
logger.DPanic("严重错误(开发环境panic)")
logger.Panic("严重错误(总是panic)")
logger.Fatal("致命错误(调用os.Exit(1))")设置日志级别
go
config := zap.NewProductionConfig()
config.Level = zap.NewAtomicLevelAt(zap.DebugLevel)
logger, _ := config.Build()
logger.Debug("调试信息")字段类型
基本类型
go
logger.Info("基本类型",
zap.String("string", "hello"),
zap.Int("int", 42),
zap.Int64("int64", 123456789),
zap.Float64("float64", 3.14),
zap.Bool("bool", true),
)复杂类型
go
logger.Info("复杂类型",
zap.Time("time", time.Now()),
zap.Duration("duration", 5*time.Second),
zap.Error(errors.New("错误信息")),
zap.Strings("strings", []string{"a", "b", "c"}),
zap.Ints("ints", []int{1, 2, 3}),
)对象类型
go
user := struct {
Name string
Age int
}{
Name: "张三",
Age: 25,
}
logger.Info("对象",
zap.Any("user", user),
zap.Reflect("reflect", user),
)格式化日志
Sugar Logger
go
sugar := logger.Sugar()
sugar.Infow("格式化日志",
"key", "value",
"count", 42,
)
sugar.Infof("格式化: %s, %d", "hello", 42)
sugar.Info("简单日志")