Go 语言怎么使用 Zap 日志库?( 二 )


Logger 模式
接下来,我们简单介绍一下 Logger? 模式,它主要用于性能和类型安全比较重要的场景中,但是,它没有 SugaredLogger 模式简单易用,我们可以根据实际场景选择使用哪种模式 。
我们修改一下现有代码,新创建 InitLoggerV2? 函数,其中 enc,ws? 和 enab? 函数的代码与 SugaredLogger 模式保持一致 。
 var loggerV2 *zap.Loggerfunc main() { InitLoggerV2() defer loggerV2.Sync() r := gin.Default() r.GET("/ping", ping) r.Run()}func ping(c *gin.Context) { loggerV2.Debug("call func ping", zap.Int("code", 200)) c.JSON(http.StatusOK, gin.H{"message": "pong", })}func InitLoggerV2() { core := zapcore.NewCore(enc(), ws(), enab()) loggerV2 = zap.New(core)}阅读上面这段代码,我们可以发现,在使用 zap 记录日志时,我们需要显示指定数据类型,一般用于性能和类型安全比较重要的场景中 。
4、zap 日志库使用 lumberjack 库进行日志切割Zap 日志库也不支持日志切割的功能,我们可以使用 lumberjack? 日志切割库进行日志切割,关于 lumberjack 库的使用方式,我们在之前的文章介绍过,此处不再重复介绍,直接上代码:
 func wsV3() zapcore.WriteSyncer { logFileName := fmt.Sprintf("./%v.log", time.Now().Format("2006-01-02")) lumberjackLogger := &lumberjack.Logger{Filename:logFileName,MaxSize:1,MaxBackups: 3,MaxAge:28,Compress:false, } return zapcore.AddSync(lumberjackLogger)}lumberjack.Logger 的字段含义:

  • Filename 日志保存文件路径
  • MaxSize 日志文件大小,单位是 MB
  • MaxBackups 保留的日志文件数量
  • MaxAge 日志文件的最长保留时间,单位是天
  • Compress 日志文件是否需要压缩
5、总结本文我们通过在 Gin 构建的应用中,使用 Zap 记录请求日志,介绍了 Zap 的使用方式,最后还通过 lumberjack 日志切割库进行切割日志 。
参考资料:
  1. https://github.com/uber-go/zap
  2. https://pkg.go.dev/go.uber.org/zap

【Go 语言怎么使用 Zap 日志库?】


推荐阅读