Go语言的Zap日志库

Go语言的Zap日志库

一、为什么使用?

1、对于go内置的log库,只有print级别,不存在多级别的日志,并且错误日志Fatal和panic也是调用了os.Exit(0)会直接退出程序;

2、Uber-go zap提供了结构化日志记录和Printf风格的日志记录;能够将事件记录到文件中,而不是应用程序控制台。日志切割-能够根据文件大小、时间或间隔等来切割日志文件。支持不同的日志级别。例如INFO,DEBUG,ERROR等。能够打印基本信息,如调用文件/函数名和行号,日志时间等。

二、使用

1、引入

import "go.uber.org/zap"

2、定制logger

//zapcore.Encoder设置log记录格式
func getEncoder() zapcore.Encoder {
	return zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())
	//也可以修改为控制台输出
	//return zapcore.NewConsoleEncoder(zap.NewProductionEncoderConfig())
}
//Writer配置文件夹路径
func getLogWriter() zapcore.WriteSyncer {
	file, _ := os.Create("./test.log")
	return zapcore.AddSync(file)
}
//获得New函数的第一个参数,第三个参数为权限参数,设置日志哪种级别能写入
core:=NewCore(encoder,writer,zapcore.DebugLevel)
//返回logger指针对象
func New(core zapcore.Core, options ...Option) *Logger

3、修改encoderConfig配置

修改Encoder函数配置

//修改之前直接返回return zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())
//修改后增加encoderConfig的配置
func getEncoder() zapcore.Encoder{
	encoderConfig := zap.NewProductionEncoderConfig()   //Add Encoding Config
	encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder  //Add Time Config
	encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder  //Add Big Writer
	return zapcore.NewJSONEncoder(encoderConfig)  //return core Add encoderConfig,ago Add zap.NewProductionEncoderConfig()
}
//在New方法中增加配置,在日志中显示是那个函数调用出现了错误
//增加option()zap.AddCaller()回调函数
logger=zap.New(core,zap.AddCaller())   //return my logger

三、切割归档

由于日志可能会过大,以后打开文件不方便,需要切割成一部分一部分的小文件,Zap不包含切割方法,需要使用Lumberjack切割

1、引入包

github.com/natefinch/lumberjack

2、加入切割功能

//修改writer中的配置
//修改前
func getWriter() zapcore.WriteSyncer{
	file,_:=os.OpenFile("test.log",os.O_CREATE|os.O_RDWR|os.O_APPEND,0666)
	return zapcore.AddSync(file)
}
//修改后
func getWriter() zapcore.WriteSyncer{
	lumberJackLogger := &lumberjack.Logger{
		Filename:   "./test.log",
		MaxSize:    10,      //每个文件最大占用内存,单位M
		MaxBackups: 5,      //备份数量
		MaxAge:     30,   //备份的天数
		Compress:   false,   //是否压缩
	}
	return zapcore.AddSync(lumberJackLogger)
}

四、设置日志信息输出在终端

因为开发阶段输出到终端就不用每次都打开日志文件,会变得更加方便,所以需要根据配置文件的mode这一项中的值来判断日志的输出位置

(1)在初始化log信息的时候判断是不是开发模式,开发模式需要输出在终端

	if mode=="dev"{
		consoleEncoder:=zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig())
		core=zapcore.NewTee(
			zapcore.NewCore(encoder,writer,zapcore.DebugLevel),
			zapcore.NewCore(consoleEncoder,zapcore.Lock(os.Stdout),zapcore.DebugLevel),
			)
	}else {
		core=zapcore.NewCore(encoder,writer,zapcore.DebugLevel)
	}

(2)注册路由的时候判断是什么模式

  if mode==gin.ReleaseMode{
        gin.SetMode(gin.ReleaseMode)
    }

如果看完对自己有所帮助,请点赞支持

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值