(7)go-micro微服务zap日志配置
阅读原文时间:2023年07月08日阅读:1

目录

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

欢迎大家加入 夏沫の梦的学习交流群 进行学习交流经验,点击