Go-日志库Zap
什么是zap
- 快,非常快,这也是 zap 最显著的特点。速度快的原因是 zap 避免使用
interface{}
和反射,并且使用 sync.Pool
减少堆内存分配。在 zap 面前 Logrus 的执行速度只有被吊打的份,你可以在官方 GitHub 仓库中看到 zap 与不同日志库的速度对比。
- 支持结构化日志记录。这是一个优秀的日志库必备功能。
- 支持七种日志级别:
Debug
、Info
、Warn
、Error
、DPanic
、Panic
、Fatal
,其中 DPanic
是指在开发环境下(development
)记录日志后会进行 panic
。
- 支持输出调用堆栈。
- 支持 Hooks 机制。
安装
go get -u go.uber.org/zap
|
基础使用
// suger 模式会稍微比logger 原生慢一点
logger, _ := zap.NewDevelopment() defer logger.Sync() sugar := logger.Sugar() sugar.Infow("failed to fetch URL", "url", "url", "attempt", 3, "backoff", time.Second, )
url:="www.piwriw.com" sugar.Info("failed to fetch URL", zap.String("url",url), zap.Int("age",18), ) sugar.Infof("Failed to fetch URL: %s", "url")
|
配置zap,logger路径
package main
import ( "go.uber.org/zap" )
func NewLogger() (*zap.Logger, error) { cfg := zap.NewProductionConfig() cfg.OutputPaths = []string{"./project.log", "stderr", "stdout"} return cfg.Build() } func main() { logger, err := NewLogger() if err != nil { panic(err) } sugar := logger.Sugar() defer sugar.Sync()
}
|
整合到gin
package middleware
import "go.uber.org/zap"
func InitLogger() { logger, err := NewLogger() if err != nil { panic(err) } zap.ReplaceGlobals(logger) } func NewLogger() (*zap.Logger, error) { cfg := zap.NewProductionConfig() cfg.OutputPaths = []string{"./project.log", "stderr", "stdout"} return cfg.Build() }
|