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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: (7)go-micro微服务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配置的代码编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
JavaScript Java Go
探索Go语言在微服务架构中的优势
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出。本文将深入探讨Go语言在构建微服务时的性能优势,包括其在内存管理、网络编程、并发模型以及工具链支持方面的特点。通过对比其他流行语言,我们将揭示Go语言如何成为微服务架构中的一股清流。
128 53
|
1月前
|
安全 Go
用 Zap 轻松搞定 Go 语言中的结构化日志
在现代应用程序开发中,日志记录至关重要。Go 语言中有许多日志库,而 Zap 因其高性能和灵活性脱颖而出。本文详细介绍如何在 Go 项目中使用 Zap 进行结构化日志记录,并展示如何定制日志输出,满足生产环境需求。通过基础示例、SugaredLogger 的便捷使用以及自定义日志配置,帮助你在实际开发中高效管理日志。
56 1
|
20天前
|
存储 运维 数据可视化
如何为微服务实现分布式日志记录
如何为微服务实现分布式日志记录
35 1
|
27天前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
44 5
|
1月前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
1月前
|
Go 数据处理 API
Go语言在微服务架构中的应用与优势
本文摘要采用问答形式,以期提供更直接的信息获取方式。 Q1: 为什么选择Go语言进行微服务开发? A1: Go语言的并发模型、简洁的语法和高效的编译速度使其成为微服务架构的理想选择。 Q2: Go语言在微服务架构中有哪些优势? A2: 主要优势包括高性能、高并发处理能力、简洁的代码和强大的标准库。 Q3: 文章将如何展示Go语言在微服务中的应用? A3: 通过对比其他语言和展示Go语言在实际项目中的应用案例,来说明其在微服务架构中的优势。
|
1月前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
36 4
|
1月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
51 3
|
1月前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
46 3
|
1月前
|
消息中间件 存储 监控
微服务日志监控的挑战及应对方案
【10月更文挑战第23天】微服务化带来模块独立与快速扩展,但也使得日志监控复杂。日志作用包括业务记录、异常追踪和性能定位。