说明之前翻译的一个教程(没有备份原地址,梯子被封了)。原地址找到后补上zap的安装开源仓库地址 https://github.com/uber-go/zap安装 go get -u go.uber.org/zap默认的三种设置ExampleDevelopmentProductionExamplefunc main() { log := zap.NewExample() log.Debug(“This is a DEBUG message”) log.Info(“This is an INFO message”) log.Info(“This is an INFO message with fields”, zap.Strings(“region”, []string{“us_west”}), zap.Int(“id”, 2)) log.Warn(“This is a WARN message”) log.Error(“This is an ERROR message”) log.DPanic(“This is a DPANIC message”)}输出:{“level”:“debug”,“msg”:“This is a DEBUG message”}{“level”:“info”,“msg”:“This is an INFO message”}{“level”:“info”,“msg”:“This is an INFO message with fields”,“region”:[“us_west”],“id”:2}{“level”:“warn”,“msg”:“This is a WARN message”}{“level”:“error”,“msg”:“This is an ERROR message”}{“level”:“dpanic”,“msg”:“This is a DPANIC message”}Developmentfunc main() { log, _ := zap.NewDevelopment() log.Debug(“This is a DEBUG message”) log.Info(“This is an INFO message”) log.Info(“This is an INFO message with fields”, zap.Strings(“region”, []string{“us_west”}), zap.Int(“id”, 2)) log.Warn(“This is a WARN message”) log.Error(“This is an ERROR message”) //log.Fatal(“This is a FATAL message”) // 程序在这停止如果不注释 //log.DPanic(“This is a DPANIC message”) // 程序在这停止如果不注释 //log.Panic(“This is a PANIC message”) // 程序在这停止如果不注释}输出2018-10-30T17:14:22.459+0800 DEBUG development/main.go:7 This is a DEBUG message2018-10-30T17:14:22.459+0800 INFO development/main.go:8 This is an INFO message2018-10-30T17:14:22.459+0800 INFO development/main.go:9 This is an INFO message with fields {“region”: [“us_west”], “id”: 2}2018-10-30T17:14:22.459+0800 WARN development/main.go:10 This is a WARN messagemain.main /home/wsl/gopath/src/wsl_learn/zap-example/development/main.go:10runtime.main /usr/local/go/src/runtime/proc.go:2012018-10-30T17:14:22.459+0800 ERROR development/main.go:11 This is an ERROR messagemain.main /home/wsl/gopath/src/wsl_learn/zap-example/development/main.go:11runtime.main /usr/local/go/src/runtime/proc.go:201Productionfunc main() { log, _ := zap.NewProduction() log.Debug(“This is a DEBUG message”) log.Info(“This is an INFO message”) log.Info(“This is an INFO message with fields”, zap.Strings(“region”, []string{“us-west”}), zap.Int(“id”, 2)) log.Warn(“This is a WARN message”) log.Error(“This is an ERROR message”) //log.Fatal(“This is a FATAL message”) // 程序在这停止如果不注释 log.DPanic(“This is a DPANIC message”) //log.Panic(“This is a PANIC message”) // 程序在这停止如果不注释}输出{“level”:“info”,“ts”:1540891173.3190675,“caller”:“production/main.go:8”,“msg”:“This is an INFO message”}{“level”:“info”,“ts”:1540891173.3191047,“caller”:“production/main.go:9”,“msg”:“This is an INFO message with fields”,“region”:[“us-west”],“id”:2}{“level”:“warn”,“ts”:1540891173.3191204,“caller”:“production/main.go:10”,“msg”:“This is a WARN message”}{“level”:“error”,“ts”:1540891173.31913,“caller”:“production/main.go:11”,“msg”:“This is an ERROR message”,“stacktrace”:“main.main\n\t/home/wsl/gopath/src/wsl_learn/zap-example/production/main.go:11\nruntime.main\n\t/usr/local/go/src/runtime/proc.go:201”}{“level”:“dpanic”,“ts”:1540891173.3191597,“caller”:“production/main.go:13”,“msg”:“This is a DPANIC message”,“stacktrace”:“main.main\n\t/home/wsl/gopath/src/wsl_learn/zap-example/production/main.go:13\nruntime.main\n\t/usr/local/go/src/runtime/proc.go:201”}三种预设方式的对比Example和Production使用的是json格式输出,Development使用行的形式输出Development从警告级别向上打印到堆栈中来跟踪始终打印包/文件/行(方法)在行尾添加任何额外字段作为json字符串以大写形式打印级别名称以毫秒为单位打印ISO8601格式的时间戳Production调试级别消息不记录Error,Dpanic级别的记录,会在堆栈中跟踪文件,Warn不会始终将调用者添加到文件中以时间戳格式打印日期以小写形式打印级别名称Sugar Logger默认的zap记录器需要结构化标签,即对每个标签,需要使用特定值类型的函数logger.Info(“This is an INFO message with fields”, zap.String(“region”, “us-west”), zap.Int(“id”, 2))虽然会显的很长,但是对性能要求较高的话,这是最快的选择。也可以使用suger logger, 它基于printf分割的反射类型检测,提供更简单的语法来添加混合类型的标签func main() { logger, _ := zap.NewDevelopment() slogger := logger.Sugar() slogger.Info(“Info() uses sprint”) slogger.Infof(“Infof() uses %s”, “sprintf”) slogger.Infow(“Infow() allows tags”, “name”, “Legolas”, “type”, 1)}输出func main() { logger, _ := zap.NewDevelopment() slogger := logger.Sugar() slogger.Info(“Info() uses sprint”) slogger.Infof(“Infof() uses %s”, “sprintf”) slogger.Infow(“Infow() allows tags”, “name”, “Legolas”, “type”, 1)}如果需要,可以随时使用记录器上的.Desugar()方法从sugar logger切换到标准记录器 log := slogger.Desugar() log.Info(“After Desugar; INFO message”) log.Warn(“After Desugar; WARN message”) log.Error(“After Desugar; ERROR message”)