这是我参与「第五届青训营 」伴学笔记创作活动的第 7天
1.Zap日志介绍
Zap是在 Go 中实现超快、结构化、分级的日志记录。
Zap日志能够提供下面这些功能:
1、能够将事件记录到文件中,也可以在应用控制台输出
2、日志切割-可以根据文件大小,时间或间隔来切割日志文件
3、支持不同的日志级别。例如 INFO、DEBUG、ERROR等
4、能够打印基本信息,如调用文件/函数名和行号,日志时间等。
2. Zap工具安装
go get -u go.uber.org/zap
go get -u go.uber.org/zapcore
go get -u gopkg.in/natefinch/lumberjack.v2
3. Zap日志初始化
package util
import (
"os"
"github.com/natefinch/lumberjack"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
var Log *zap.Logger
func LogConfig() {
//获取编码器,NewJSONEncoder()输出json格式,NewConsoleEncoder()输出普通文本格式
encoderConfig := zap.NewProductionEncoderConfig()
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder //指定时间格式
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
encoder := zapcore.NewConsoleEncoder(encoderConfig)
//文件writeSyncer
fileWriteSyncer := zapcore.AddSync(&lumberjack.Logger{
Filename: "./logFile/tiktok_demo.log", //日志文件存放目录
MaxSize: 1, //文件大小限制,单位MB
MaxBackups: 5, //最大保留日志文件数量
MaxAge: 30, //日志文件保留天数
Compress: false, //是否压缩处理
})
fileCore := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(fileWriteSyncer, zapcore.AddSync(os.Stdout)), zapcore.DebugLevel) //第三个及之后的参数为写入文件的日志级别,ErrorLevel模式只记录error级别的日志
Log = zap.New(fileCore, zap.AddCaller()) //AddCaller()为显示文件名和行号
}
注:
Encoder
: 编码器(如何写入日志)。我们将使用开箱即用的NewJSONEncoder(),并使用预先设置的ProductionEncoderConfig()。
WriteSyncer
: 指定日志将写到哪里去。但是打开的类型不一样,文件打开的是io.writer类型,而我们需要的是WriteSyncer,所以我们使用zapcore.AddSync()函数来进行一个转换。
LevelEnabler
: 这个就是我们所需要打印的日志等级设置了,通过它来动态的保存日志,比如上线后我们error以下的日志就不打印了
4.使用Lumberjack进行日志切割归档
Lumberjack Logger采用以下属性作为输入:
| 属性 | 含义 | | :-: | :- | | | Filename | 日志文件的位置,也就是路径 | | MaxSize | 在进行切割之前,日志文件的最大大小(以MB为单位) | | MaxBackups | 保留旧文件的最大个数 | | MaxAges | 保留旧文件的最大天数 | | Compress | 是否压缩/归档旧文件| | | |