Go之zap的log包使用

背景:

        当前项目需要,因为在项目部署后,会持续的产生大量的日志,那么其中最重要的就是我们所说的内存消耗问题了,一旦部署服务器,会每时每刻的产生日志,随着时间的推移,可能日志就会达到相当大的内存。如果项目很多可能堆积的大量日志会导致系统服务无法使用

我就是根据这个需求,在网上找了一些相关的公共log包,看看有没有什么可以使用的,发现其中zap包性能和使用上面最为方便,下面就具体介绍相关的使用:(springBoot的log已经解决了这个问题,前面的博客已经进行了说明)

 首先:

 该包的优势:

 zap的包主要就是性能强大,同时可以看出,该包可以根据用户的需求进行自定义设计,例如,可以配置文件多大进行打包压缩包,同时多久可以自动的清除文件。会保存最新的文件,而自动的产出过期的文件,过期日期自定义设定。

  需要的依赖包:

"go.uber.org/zap"
"go.uber.org/zap/zapcore"

然后写相关的logger.go文件,具体的内容如下:(该文件我是在项目的文件夹中建立文件夹log,然后在里面建立文件,里面的东西可以直接使用,唯一需要改动的就是

filePath: 文件的名称
configFilePath  : 文件夹的路径

  。。。需要配置的可以将这部分内容配置到我们的项目配置文件中

package log

import (
	"fmt"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
	"gopkg.in/natefinch/lumberjack.v2"
	"os"
	"strings"
)

// error logger
var errorLogger *zap.SugaredLogger

var levelMap = map[string]zapcore.Level{
	"debug":  zapcore.DebugLevel,
	"info":   zapcore.InfoLevel,
	"warn":   zapcore.WarnLevel,
	"error":  zapcore.ErrorLevel,
	"dpanic": zapcore.DPanicLevel,
	"panic":  zapcore.PanicLevel,
	"fatal":  zapcore.FatalLevel,
}

func getLoggerLevel(lvl string) zapcore.Level {
	if level, ok := levelMap[lvl]; ok {
		return level
	}
	return zapcore.InfoLevel
}

func init() {
	filePath := "log.log"
	// configFilePath 文件夹位置
	configFilePath := "./logs"
	if configFilePath != "" {
		if strings.HasSuffix(configFilePath, "/") { //判断是否以/结尾
			filePath = configFilePath + filePath
		} else {
			filePath = configFilePath + "/" + filePath
		}
	}
		configLogLevel := "INFO" //等级

	fmt.Printf("log.level:%s\n", configLogLevel)
	level := getLoggerLevel(configLogLevel) //日志等级
	hook := lumberjack.Logger{
		Filename: filePath, // 日志文件路径
		MaxSize:  128,      // 每个日志文件保存的最大尺寸 单位:M
		//LocalTime: true,
		MaxBackups: 100,  // 日志文件最多保存多少个备份
		MaxAge:     30,   // 文件最多保存多少天
		Compress:   true, // 是否压缩
	}
	syncWriter := zapcore.AddSync(&hook)
	highPriority := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
		return lvl >= zapcore.ErrorLevel
	})
	lowPriority := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
		return lvl < zapcore.ErrorLevel
	})
	encoder := zap.NewProductionEncoderConfig()
	encoder.EncodeTime = zapcore.ISO8601TimeEncoder
	consoleDebugging := zapcore.Lock(os.Stdout)
	consoleErrors := zapcore.Lock(os.Stderr)
	consoleEncoder := zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig())
	core := zapcore.NewTee(
		zapcore.NewCore(zapcore.NewJSONEncoder(encoder), syncWriter, zap.NewAtomicLevelAt(level)),
		zapcore.NewCore(consoleEncoder, consoleErrors, highPriority),
		zapcore.NewCore(consoleEncoder, consoleDebugging, lowPriority),
	)

	logger := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
	errorLogger = logger.Sugar()
}

func Debug(args ...interface{}) {
	errorLogger.Debug(args...)
}

func Debugf(template string, args ...interface{}) {
	errorLogger.Debugf(template, args...)
}

func Info(args ...interface{}) {
	errorLogger.Info(args...)
}

func Infof(template string, args ...interface{}) {
	errorLogger.Infof(template, args...)
}

func Warn(args ...interface{}) {
	errorLogger.Warn(args...)
}

func Warnf(template string, args ...interface{}) {
	errorLogger.Warnf(template, args...)
}

func Error(args ...interface{}) {
	errorLogger.Error(args...)
}

func Errorf(template string, args ...interface{}) {
	errorLogger.Errorf(template, args...)
}

func DPanic(args ...interface{}) {
	errorLogger.DPanic(args...)
}

func DPanicf(template string, args ...interface{}) {
	errorLogger.DPanicf(template, args...)
}

func Panic(args ...interface{}) {
	errorLogger.Panic(args...)
}

func Panicf(template string, args ...interface{}) {
	errorLogger.Panicf(template, args...)
}

func Fatal(args ...interface{}) {
	errorLogger.Fatal(args...)
}

func Fatalf(template string, args ...interface{}) {
	errorLogger.Fatalf(template, args...)
}

 下面就是相关的测试用例:

func Test14(t *testing.T) {
	logger.Infof("Hello")
	logger.Info("World!!")
	logger.Debug("World!!")
	logger.Error("World!!")

}

测试结果如下:

log.level:INFO
=== RUN   Test14
2020-11-26T13:46:02.555+0800	INFO	test/gotmGao_test.go:125	Hello
2020-11-26T13:46:02.571+0800	INFO	test/gotmGao_test.go:126	World!!
2020-11-26T13:46:02.571+0800	DEBUG	test/gotmGao_test.go:127	World!!
2020-11-26T13:46:02.571+0800	ERROR	test/gotmGao_test.go:128	World!!

自动创建的文件夹和相关的文件: 

      

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值