一 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配置的代码编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。