(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配置的代码编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。
欢迎大家加入 夏沫の梦的学习交流群 进行学习交流经验,点击
(7)go-micro微服务zap日志配置的更多相关文章
- 微服务-springboot日志配置
springboot 默认会加载classpath:logback-spring.xml文件. springProfile 中的name名字对应application-xx.properties 中的 ...
- spring cloud+dotnet core搭建微服务架构:配置中心(四)
前言 我们项目中有很多需要配置的地方,最常见的就是各种服务URL地址,这些地址针对不同的运行环境还不一样,不管和打包还是部署都麻烦,需要非常的小心.一般配置都是存储到配置文件里面,不管多小的配置变动, ...
- spring cloud+dotnet core搭建微服务架构:配置中心续(五)
前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这 ...
- .net core 微服务之日志落盘设计
原文:.net core 微服务之日志落盘设计 目录 1.设计目标 2.日志流程 3.串联请求事务 3.1 请求ID 3.2 处理服务器.服务 3.3 处理接口名 3.4 日志的发生时间 3.5 接口 ...
- spring cloud+.net core搭建微服务架构:配置中心续(五)
前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这 ...
- spring cloud+.net core搭建微服务架构:配置中心(四)
前言 我们项目中有很多需要配置的地方,最常见的就是各种服务URL地址,这些地址针对不同的运行环境还不一样,不管和打包还是部署都麻烦,需要非常的小心.一般配置都是存储到配置文件里面,不管多小的配置变动, ...
- 微服务之springCloud-docker-feign配置(五)
简介 上一节我们讨论了怎么用feign声明式调用cloud的生产者,这节我们讨论一下feign配置,通过编写配置类,我们可以自定义feign的日志级别,日志扫描目录,可以通过feign调用服务在eur ...
- go micro 微服务框架温习
go mod edit -require="github.com/chromedp/chromedp@v0.1.0" @后面加上你需要的版本号.就可以 已经修改go.mod 里的依 ...
- .Net Core with 微服务 - Seq 日志聚合
上一次我们介绍并演示了如果使用 Consul 做为我们微服务的注册中心,来实现服务的注册与发现.那么本次我们讲会演示如何做日志聚合.日志聚合比较常用的有 ELK 等,但是这次我想要介绍的是一款比较小众 ...
- 从 1.5 开始搭建一个微服务框架——日志追踪 traceId
你好,我是悟空. 前言 最近在搭一个基础版的项目框架,基于 SpringCloud 微服务框架. 如果把 SpringCloud 这个框架当做 1,那么现在已经有的基础组件比如 swagger/log ...
随机推荐
- 微服务开发框架-----Apache Dubbo
文章目录 一.简介 二.概念与架构 一.简介 Apache Dubbo 是一款微服务开发框架,提供了RPC通信与微服务治理两大关键能力.使用Dubbo开发的微服务,将具备相互之间的远程发现与通信能力, ...
- C#中的装箱和拆箱
什么是装箱和拆箱 装箱(boxing)和拆箱(unboxing)是C#类型系统的核心概念.是不同于C与C++的新概念!,通过装箱和拆箱操作,能够在值类型和引用类型中架起一做桥梁. 换言之,可以轻松的实 ...
- 0基础90分钟会用PS——GenJi笔记
数码图像的相关基础概念 1.位图和矢量图 位图 也叫点阵图像,位图使用也称像素的一格一格的小点来描述图像,图放大后我们可以看到像素点 矢量图 根据几何特性来绘制图形,用线段和曲线描述图像,可以是一个一 ...
- iptables入门到精通
iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的"安全框架"中,这个"安全框架&qu ...
- python中while循环
# 1. print('1.我在学python 输出5遍') print('我在学python'*5) print('我在学python\n'*5) # 只能做单一重复 不能做线性 # 2.while ...
- 试试将.NET7编译为WASM并在Docker上运行
之前有听到说Docker支持Wasmtime了,刚好.NET7也支持WASM,就带大家来了解一下这个东西,顺便试试它怎么样. 因为WASM(WebAssembly) 一开始是一个给浏览器的技术,比起J ...
- Node.js的学习(二)node.js 模块化
一.Node.js模块化 1.模块化概要 早期的javascript版本没有块级作用域.没有类.没有包.也没有模块,这样会带来一些问题,如复用.依赖.冲突.代码组织混乱等,随着前端的膨胀,模块化显得非 ...
- uboot引导应用程序
uboot默认是支持执行应用程序的,就像引导内核一样,我们也可以自己写一个应用程序,让uboot启动时引导. 在uboot examples/standalone 目录下,有hello_world.c ...
- AI绘画提示词创作指南:DALL·E 2、Midjourney和 Stable Diffusion最全大比拼 ⛵
作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 自然语言处理实战系列:https://www.showmeai.tech ...
- MySQL进阶实战3,mysql索引详解,上篇
一.索引 索引是存储引擎用于快速查找记录的一种数据结构.我觉得数据库中最重要的知识点,就是索引. 存储引擎以不同的方式使用B-Tree索引,性能也各有不同,各有优劣.例如MyISAM使用前缀压缩技术使 ...