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

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,182元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: (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配置的代码编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。
相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
9天前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
92 4
|
8天前
|
监控 安全 程序员
Python日志模块配置:从print到logging的优雅升级指南
从 `print` 到 `logging` 是 Python 开发的必经之路。`print` 调试简单却难维护,日志混乱、无法分级、缺乏上下文;而 `logging` 支持级别控制、多输出、结构化记录,助力项目可维护性升级。本文详解痛点、优势、迁移方案与最佳实践,助你构建专业日志系统,让程序“有记忆”。
115 0
|
1月前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
157 1
日志收集和Spring 微服务监控的最佳实践
|
1月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
274 4
|
7月前
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
812 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
安全 BI 网络安全
EventLog Analyzer 如何满足等保合规要求?密码有效期、产品日志保留、配置备份三大核心问题全面解答
EventLog Analyzer(ELA)助力企业满足网络安全等级保护要求,支持配置自动/手动备份、日志180天留存及密码策略管理,提升合规性与安全运营效率。
|
7月前
|
Java 关系型数据库 数据库
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——Spring Boot 事务配置
本文介绍了 Spring Boot 中的事务配置与使用方法。首先需要导入 MySQL 依赖,Spring Boot 会自动注入 `DataSourceTransactionManager`,无需额外配置即可通过 `@Transactional` 注解实现事务管理。接着通过创建一个用户插入功能的示例,展示了如何在 Service 层手动抛出异常以测试事务回滚机制。测试结果表明,数据库中未新增记录,证明事务已成功回滚。此过程简单高效,适合日常开发需求。
985 0
|
3月前
|
JSON 安全 Go
Go语言项目工程化 —— 日志、配置、错误处理规范
本章详解Go语言项目工程化核心规范,涵盖日志、配置与错误处理三大关键领域。在日志方面,强调其在问题排查、性能优化和安全审计中的作用,推荐使用高性能结构化日志库zap,并介绍日志级别与结构化输出的最佳实践。配置管理部分讨论了配置分离的必要性,对比多种配置格式如JSON、YAML及环境变量,并提供viper库实现多环境配置的示例。错误处理部分阐述Go语言显式返回error的设计哲学,讲解标准处理方式、自定义错误类型、错误封装与堆栈追踪技巧,并提出按调用层级进行错误处理的建议。最后,总结各模块的工程化最佳实践,助力构建可维护、可观测且健壮的Go应用。
|
4月前
|
存储 NoSQL MongoDB
Docker中安装MongoDB并配置数据、日志、配置文件持久化。
现在,你有了一个运行在Docker中的MongoDB,它拥有自己的小空间,对高楼大厦的崩塌视而不见(会话丢失和数据不持久化的问题)。这个MongoDB的数据、日志、配置文件都会妥妥地保存在你为它精心准备的地方,天旋地转,它也不会失去一丁点儿宝贵的记忆(即使在容器重启后)。
456 4
|
6月前
|
存储 监控 API
【Azure App Service】分享使用Python Code获取App Service的服务器日志记录管理配置信息
本文介绍了如何通过Python代码获取App Service中“Web服务器日志记录”的配置状态。借助`azure-mgmt-web` SDK,可通过初始化`WebSiteManagementClient`对象、调用`get_configuration`方法来查看`http_logging_enabled`的值,从而判断日志记录是否启用及存储方式(关闭、存储或文件系统)。示例代码详细展示了实现步骤,并附有执行结果与官方文档参考链接,帮助开发者快速定位和解决问题。
178 23

热门文章

最新文章