golang 高效日志库 zap

导入zap库:

        go get -u go.uber.org/zap

基本使用:

package main

import (
	"go.uber.org/zap"
)

func SugarProductionLogger() {
	logger, _ := zap.NewProduction()	//生成环境中使用
	defer logger.Sync() // flushes buffer, if any
	message := "SugerLogger_Production"
	sugar := logger.Sugar()
	sugar.Infow("failed to fetch Message", "Message", message) // Structured context as loosely typed key-value pairs.
	sugar.Infof("failed to fetch Message: %s", message)
}

func SugarDevelopmentLogger() {
	logger, _ := zap.NewDevelopment()	//开发环境中使用
	defer logger.Sync() // flushes buffer, if any
	message := "SugerLogger_Development"
	sugar := logger.Sugar()
	sugar.Infow("failed to fetch Message", "Message", message) // Structured context as loosely typed key-value pairs.
	sugar.Infof("failed to fetch Message: %s", message)
}

// zap 中提供了两种日志记录器,SugaredLogger和Logger ,相比较之下Logger的性能优于SugaredLogger但是使用上也相对欠缺方便
func NewLogger() {
	logger, _ := zap.NewProduction()
	defer logger.Sync()
	message := "Logger"
	logger.Info("failed to fetch message", zap.String("Message", message))
}

func main() {
	SugarProductionLogger()
	SugarDevelopmentLogger()
	NewLogger()
}

 运行结果:

 zap.NewProduction()和zap.NewDevelopment()是在不同的情况下使用

两函数的区别在于一些配置

  

 将日志输出到文件中:

package main

import (
	"go.uber.org/zap"
	"time"
)

func NewLogger() (logger *zap.Logger, err error) {
	cfg := zap.NewProductionConfig()    //这里不在调用zap.NewProduction()
	cfg.OutputPaths = []string{
		"./FileName.log",    //文件需要存储的位置和名称
		"stderr",            //终端输出
		"stdout",            //终端输出
	}
	return cfg.Build()
}

func main() {
	logger, err := NewLogger()
	if err != nil {
		return
	}
	Massage := "Log write file"
	defer logger.Sync()
	sugar := logger.Sugar()
	sugar.Infow("failed to fetch URL", "Massage", Massage, "backParam", time.Second)
}

 在gin中使用zap库

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
	"net/http"
)

func main() {
	port := 8080

	logger, _ := zap.NewProduction()
	defer logger.Sync()
	sugar := logger.Sugar() //func (log *Logger) Sugar() *SugaredLogger
	//上述代码可以简化为 zap.S()  sugarLogger 这里都是返回*SugaredLogger
	//zap.L()返回的就是Logger日志记录器
	//zap.L()和zap.S()提供了一个安全访问logger的方式
	/*
		func S() *SugaredLogger {
			_globalMu.RLock()
			s := _globalS
			_globalMu.RUnlock()
			return s
		}
	*/
	zap.ReplaceGlobals(logger) //将全局的logger变为zap.NewProduction()返回的
	zap.S()                    //func S() *SugaredLogger 这里的zap.S()可以生成一个全局的logger

	r := gin.Default()
	r.GET("/", func(context *gin.Context) {
		context.JSON(http.StatusOK, gin.H{
			"message": "zap应用到Gin中",
		})
	})

	sugar.Infof("启动服务监听端口:%d", port)
	zap.S().Infof("zap.S()启动服务监听端口:%d", port)

	err := r.Run(fmt.Sprintf(":%d", port))
	if err != nil {
		sugar.Errorw("启动服务错误", "message", err)
	}
}

运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值