其他分享
首页 > 其他分享> > Zap简单使用

Zap简单使用

作者:互联网

前言

zap 是 uber 开源的一个日志记录的包, uber 在 go 的领域建树颇多, zap 更是优秀, 相比于自带的 log ,他有更多的功能, 当然, 最显眼的还是他很快, 本文介绍 zap 模块的基本使用

正文

zap的使用由 编码器 和 初始化 组成, 编码器表示输出的格式, DEMO如下

package tool

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

// Log zapLog对象
var Log *zap.Logger

// 编码器
func getEncoder() zapcore.Encoder {
	// 使用默认的JSON编码,方便使用
	encoderConfig := zap.NewProductionEncoderConfig()
	encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
	encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
	return zapcore.NewJSONEncoder(encoderConfig)
}

// InitLogger 初始化Logger
func InitLogger() {
	encoder := getEncoder()
	core := zapcore.NewCore(encoder, nil, zapcore.DebugLevel)

	Log = zap.New(core, zap.AddCaller())
}

使用方法为直接调用生成的 Log, 比如

	_, err := tools.DB.Exec(sqlStr, formPassWord, time.Now(), formPhone)
	if err != nil {
		tools.Log.Error("1002", zap.Error(err))  // log
		tools.FormatError(c, 1002, "error")
		return
	}

Log.Error 代表生成一条 Error 的log, 参数一是 msg 内容, 这个是自定义的, 根据团队的规范来, 参数二是 err 信息, 使用 zap.Error 包装可生成额外的信息比如报错的路径/文件/行 等信息, 输出的日志类似

{"level":"ERROR","ts":"2020-04-19T12:38:14.587+0800","caller":"property/view.go:464","msg":"1002","error":"Error 1054: Unknown column 'propertyid' in 'on clause'"}

将日志保存在本地

如果项目有日志服务进行日志收集那么到这里就结束了, 如果需要将日志写在本地你还需要看下去

我们使用第三方包来达到这个效果

lumberjack

该包可以自己进行日志的切割, 避免日志推挤过多

结合 zap 使用如下

package tools

import (
	"github.com/natefinch/lumberjack"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

// Log zapLog对象
var Log *zap.Logger

// 日志切割设置
func getLogWriter() zapcore.WriteSyncer {
	lumberJackLogger := &lumberjack.Logger{
		Filename:   "api.log", // 日志文件位置
		MaxSize:    10,         // 日志文件最大大小(MB)
		MaxBackups: 5,          // 保留旧文件最大数量
		MaxAge:     30,         // 保留旧文件最长天数
		Compress:   false,      // 是否压缩旧文件
	}
	return zapcore.AddSync(lumberJackLogger)
}

// 编码器
func getEncoder() zapcore.Encoder {
	// 使用默认的JSON编码
	encoderConfig := zap.NewProductionEncoderConfig()
	encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
	encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
	return zapcore.NewJSONEncoder(encoderConfig)
}

// InitLogger 初始化Logger
func InitLogger() {
	writeSyncer := getLogWriter()
	encoder := getEncoder()
	core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)

	Log = zap.New(core, zap.AddCaller())
}

使用方法与上方一致

标签:zapcore,Log,简单,Zap,使用,go,日志,zap,encoderConfig
来源: https://www.cnblogs.com/chnmig/p/12747347.html