zap日志库
简介:
zap日志库是由uber开发的一个用于记录日志的库,相较于golang自带的日志库拥有更强大的功能。拥有结构化,快速,分级别记录日志等诸多优点。更多信息可以访问其官方库地址:GitHub
安装与导入:
- 在命令行使用命令
go get -u go.uber.org/zap
导入:
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
创建实例:
zap创建实例又三个方法:zap.NewProduction()
/zap.NewDevelopment()
或者zap.Example()
.这三个方法都能创建一个logger,但是记录的信息不同。
zap.NewProduction():
§ 调试级别消息不记录
§ Error,Dpanic级别的记录,会在堆栈中跟踪文件,Warn不会
§ 始终将调用者添加到文件中
§ 以时间戳格式打印日期
§ 以小写形式打印级别名称
zap.NewDevelopment():
§ 从警告级别向上打印到堆栈中来跟踪
§ 始终打印包/文件/行(方法)
§ 在行尾添加任何额外字段作为json字符串
§ 以大写形式打印级别名称
§ 以毫秒为单位打印ISO8601格式的时间戳
此处我们用production举例:
定义一个全局log对象:
var log *zap.Logger
初始化log:
log, _ := zap.NewProduction()
在需要的地方记录信息:
// 一句不同级别使用不同参数,具体一句情况而定。
log.Debug("This is a DEBUG message")
log.Info("This is an INFO message")
除了普通的logger,zap还提供了更加简单易用的sugarlogger,虽然在运行速度上比logger稍慢,但依旧比同类型的日志库快很多。在创建实例的时候只需要再对log对象调用.Sugar()
函数即可。
var log *zap.Logger
var sugar *zap.SugaredLogger
func initLogger() {
log, _ = zap.NewProduction()
sugar = log.Sugar()
}
他们在使用方法是基本一致的,如果对系统性能没有极致的要求,使用sugar也是完全够用的。
写入文件:
上面的创建方法都会默认把日志输出到控制台,然而在实际开发中一般都会选择存放到日志文件当中,而要将日志写入到文件当中就需要使用New()
函数来创建对象。
// 获取编码器--写入日志的方法
func getEncoder() zapcore.Encoder {
return zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())
}
// 文件写入地址
func getLogWriter() zapcore.WriteSyncer {
file, _ := os.Create("./test.log")
return zapcore.AddSync(file)
}
func InitLogger() {
writeSyncer := getLogWriter()
encoder := getEncoder()
// 第三个参数表示日志的级别
core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)
logger := zap.New(core)
sugarLogger = logger.Sugar()
}
zap支持的日志级别有:
// DebugLevel logs are typically voluminous, and are usually disabled in
// production.
DebugLevel Level = iota - 1
// InfoLevel is the default logging priority.
InfoLevel
// WarnLevel logs are more important than Info, but don't need individual
// human review.
WarnLevel
// ErrorLevel logs are high-priority. If an application is running smoothly,
// it shouldn't generate any error-level logs.
ErrorLevel
// DPanicLevel logs are particularly important errors. In development the
// logger panics after writing the message.
DPanicLevel
// PanicLevel logs a message, then panics.
PanicLevel
// FatalLevel logs a message, then calls os.Exit(1).
FatalLevel