【Golang】Goweb组件--Zap日志库

1、安装

go get -u go.uber.org/zap

2、Zap Logger

  • Sugared Logger:适用于对于性能要求并不是很极致的场景下
  • Logger:适用于需要发挥Zap极致性能的情况下,速度比Sugared Logger更快

3、Logger

  • 通过zap.NewProduction()/zap.NewDevelopment()或者zap.Example()创建一个Logger。
  • 上面函数创建的Logger区别在于它所记录的信息不同。
  • 默认情况下,日志会打印到应用程序的console界面。

  下面是使用zap.NewProduction()的例子,使用该例子来查看成功或失败得到的日志信息。

package main

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

var logger *zap.Logger

func main() {
	InitLogger()
	defer logger.Sync()
	simpleHttpGet("www.google.com")
	simpleHttpGet("http://www.google.com")
}

func InitLogger() {
	logger, _ = zap.NewProduction()
}

func simpleHttpGet(url string) {
	resp, err := http.Get(url)
	if err != nil {
		logger.Error(
			"Error fetching uel..",
			zap.String("url", url),
			zap.Error(err))
	} else {
		logger.Info("Success..",
			zap.String("statusCode", resp.Status),
			zap.String("url", url))
		resp.Body.Close()
	}
}

4、定制Logger

将日志写入文件而不是终端,使用的是zap.New(...)方法来手动传递所有配置,而不是使用zap.NewProduction()这样的预置方法来创建logger。

func New(core zapcore.Core, options ...Option) *Logger

zapcore.Core需要完成三个配置,Encoder、WriteSyncer、LogLever
1、Encoder:编码器,如何写入日志,这里使用NewJSONEncoder(),并使用预先设置ProductionEncoderConfig()

zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())

同理这里可以使用NewConsoleEncoder(),并且自定义encoderConfig

func getEncoder() zapcore.Encoder {
	encoderConfig := zapcore.EncoderConfig{
		TimeKey:        "ts",
		LevelKey:       "level",
		NameKey:        "logger",
		CallerKey:      "caller",
		MessageKey:     "msg",
		StacktraceKey:  "stacktrace",
		LineEnding:     zapcore.DefaultLineEnding,
		EncodeLevel:    zapcore.LowercaseLevelEncoder,
		EncodeTime:     zapcore.ISO8601TimeEncoder,
		EncodeDuration: zapcore.SecondsDurationEncoder,
		EncodeCaller:   zapcore.ShortCallerEncoder,
	}
	return zapcore.NewConsoleEncoder(encoderConfig)
}

2、WriterSyncer:指定日志写到哪里去。这里使用zapcore.AddSync()并且将打开的文件句柄传进去。

file, _ := os.Create("./test.log")
writeSyncer := zapcore.AddSync(file)

3、Log Level:表示了那种级别的日志会被写入,zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)中的DebugLevel就是最低级别的日志级别

func InitLogger() {
	//logger, _ = zap.NewProduction()
	writeSyncer := getLogWriter()
	encoder := getEncoder()
	core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)

	logger = zap.New(core)
	sugarLogger = logger.Sugar()
}

5、Lumberjack进行日志切割归档

安装

go get -u github.com/natefinch/lumberjack

我们修改WriteSyncer的代码来获取Lumberjack的支持,下面的配置表示当日志大小超过10MB时,就会对其进行拆分。

func getLogWriter() zapcore.WriteSyncer {
	lumberjackLogger := &lumberjack.Logger{
		Filename:   "./test.log",
		MaxSize:    10,    //单位是MB
		MaxBackups: 5,     //最大备份数量
		MaxAge:     30,    //最大备份天数
		Compress:   false, //是否压缩
	}
	return zapcore.AddSync(lumberjackLogger)
}
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rockict_z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值