首页 > 其他分享 >(7)go-micro微服务zap日志配置

(7)go-micro微服务zap日志配置

时间:2023-01-11 11:11:49浏览次数:66  
标签:... args micro func go 日志 logger zap

目录

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

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

标签:...,args,micro,func,go,日志,logger,zap
From: https://www.cnblogs.com/qi66/p/17043150.html

相关文章

  • go 实现一个简单的web服务
    packagemainimport( "fmt" "log" "net/http" "strings")funcsayhelloName(whttp.ResponseWriter,r*http.Request){ r.ParseForm()//解析参数,默认是不会......
  • Django序列化器的简单使用
    [Django序列化器的简单使用-SSgeek-博客园](https://www.cnblogs.com/ssgeek/p/13263810.html)注意:serializer 不是只能为数据库模型类定义,也可以为非数据库模型类的......
  • Go 标准库之 io.Copy 和 ioutil.ReadAll
    1.go标准库之io.Copy和ioutil.ReadAll1.1介绍go标准库中通过ioutil.ReadAll实现数据流的读取,io.Copy实现数据流的读取和写入。那两者有什么区别呢?有。iouti......
  • 聊聊MongoDB中连接池、索引、事务
    大家好,我是哪吒。三分钟你将学会:MongoDB连接池的使用方式与常用参数查询五步走,能活九十九?MongoDB索引与MySQL索引有何异同?MongoDB事务与ACID什么是聚合框架?在最......
  • Go语言核心知识回顾(反射)
    有时要求写一个函数有能力统一处理各种值类型的函数,而这些类型可能无法共享同一个接口,也可能布局未知,也有可能这个类型在设计函数时并不存在,当我们无法透视一个未知类型的......
  • Micropython 呼吸灯,使用 machine.pwm
    学习ESP32micropython,使用网路课件最方便:三、PWM呼吸灯利用PWM的调制作用,制作呼吸灯,pwm()没有解释的很清楚,再来一个连接PWM(脉宽调制)frommachineimportPin,P......
  • Go语言快速入门
    简介Go是一个专门针对多处理器系统应用程序的编程进行了优化的,可以媲美C或C++代码的速度,而且更加安全、支持并行进程的语言。Go支持面向对象,而且具有真正的闭包(closures......
  • 下载Oracle_BI_DW_AC_10.1.3.4.1_for_MicrosoftWindows_and_InformaticaPowerCenter_a
    oracle官方下载地址:​​https://edelivery.oracle.com/​​1.注册或登录,必须要注册账户,很简单,注册一个,很多软件可以下载,都很有用。2.注册登录后,选择中国:china-CN,对下......
  • DragonBones快速入门指南
    DragonBones快速入门指南黄竣(@fans8)DragonBones快速入门指南采用​​知识共享协议3.0版本​​。目录​​DragonBones是什么?​​​​功能特色​​​​下载与安装设置......
  • Django入门
    入门首先是注意这个发音:D是不发音的,jangoDjango是使用Python语言编写的一个广受欢迎且功能完整的服务器端网站框架。可以方便创建一个基本可用,安全,可扩展,可维护的项......