• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Asc.416e74
博客园    首页    新随笔    联系   管理     

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
posted @ 2021-03-27 14:59  ストッキング  阅读(275)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3