一 Zap日志介绍
Zap是在 Go 中实现超快、结构化、分级的日志记录。
Zap日志能够提供下面这些功能:
1、能够将事件记录到文件中,也可以在应用控制台输出
2、日志切割-可以根据文件大小,时间或间隔来切割日志文件
3、支持不同的日志级别。例如 INFO、DEBUG、ERROR等
4、能够打印基本信息,如调用文件/函数名和行号,日志时间等。
zap的基本配置
Zap提供了两种类型的日志记录器—Sugared Logger 和 Logger 。
在性能很好但不是很关键的上下文中,使用 SugaredLogger 。它比其他结构化日志记录包快4-10倍,并且支持结构化和printf风格的日志记录。
在每一微秒和每一次内存分配都很重要的上下文中,使用 Logger 。它甚至比 SugaredLogger 更快,内存分配次数也更少,但它只支持强类型的结构化日志记录。
二 Zap日志安装
go get -u go.uber.org/zap go get -u go.uber.org/zapcore go get -u gopkg.in/natefinch/lumberjack.v2
- 使用lumberjack进行日志划分
三 Zap日志初始化
- 在logger目录下新建zap.go文件
package logger import ( "account/common/micro" "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" ) var ( logger *zap.SugaredLogger ) func Init() error { syncWriter := zapcore.AddSync( &lumberjack.Logger{ Filename: micro.ConsulInfo.Log.Filename, //文件名称 MaxSize: int(micro.ConsulInfo.Log.MaxSize), //MB MaxAge: int(micro.ConsulInfo.Log.MaxAge), MaxBackups: int(micro.ConsulInfo.Log.MaxBackips), //最大备份 LocalTime: true, Compress: true, //是否启用压缩 }) //编码 encoder := zap.NewProductionEncoderConfig() //时间格式 encoder.EncodeTime = zapcore.ISO8601TimeEncoder core := zapcore.NewCore( // 编码器 zapcore.NewJSONEncoder(encoder), syncWriter, // zap.NewAtomicLevelAt(zap.DebugLevel)) log := zap.New( core, zap.AddCaller(), zap.AddCallerSkip(1)) logger = log.Sugar() return nil }
四 Zap日志重写方法
- 在zap.go写入以下代码:
func Debug(args ...interface{}) { logger.Debug(args) } func Debugf(template string, args ...interface{}) { logger.Debugf(template, args...) } func Info(args ...interface{}) { logger.Info(args...) } func Infof(template string, args ...interface{}) { logger.Infof(template, args...) } func Warn(args ...interface{}) { logger.Warn(args...) } func Warnf(template string, args ...interface{}) { logger.Warnf(template, args...) } func Error(args ...interface{}) { logger.Error(args...) } func Errorf(template string, args ...interface{}) { logger.Errorf(template, args...) } func DPanic(args ...interface{}) { logger.DPanic(args...) } func DPanicf(template string, args ...interface{}) { logger.DPanicf(template, args...) } func Panic(args ...interface{}) { logger.Panic(args...) } func Panicf(template string, args ...interface{}) { logger.Panicf(template, args...) } func Fatal(args ...interface{}) { logger.Fatal(args...) } func Fatalf(template string, args ...interface{}) { logger.Fatalf(template, args...) }
五 Zap日志使用
- 在main.go文件写入以下代码完成初始化:
// 4.zap日志初始化 if err := logger.Init(); err != nil { fmt.Printf("Init logger failed, err: %v\n", err) return } defer zap.L().Sync()
使用logger进行日志记录,如:logger.Info()
六 最后
- 至此,go-micro微服务zap日志配置开发工作就正式完成。
- 接下来就开始Mysql配置的代码编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。