zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    mysql中的enum型
    mysql中的时间year/date/time/datetime
    一些数字的属性
    mysql增删
    Perl6 Bailador框架(8):自定义400/500
    react: typescript jest && enzyme
    webstorm tslint配置
    react: typescript import images alias
    JSONP原理及简单实现
    纯css画三角形
  • 原文地址:https://www.cnblogs.com/ltozvxe/p/14585695.html
Copyright © 2011-2022 走看看