golang 日志库ZAP[uber-go zap]
1. 简要说明
zap 是 uber 开源的 Go 高性能日志库,支持不同的日志级别, 能够打印基本信息等,但不支持日志的分割,这里我们可以使用 lumberjack 也是 zap 官方推荐用于日志分割,结合这两个库我们就可以实现以下功能的日志机制:
- 能够将事件记录到文件中,而不是应用程序控制台;
- 日志切割能够根据文件大小、时间或间隔等来切割日志文件;
- 支持不同的日志级别,例如 DEBUG , INFO , WARN , ERROR 等;
- 能够打印基本信息,如调用文件、函数名和行号,日志时间等;
- 官网地址:https://github.com/uber-go/zap
福利彩蛋:没有好玩的 API 接口?上百款免费接口等你来,免费 API,免费 API 大全
2. 下载安装
// 初始化go mod 通过mod管理扩展包
go mod init zaplog
//使用下面命令安装
go get -u go.uber.org/zap
//如果下载失败,则使用以下命令重新下载安装
go get github.com/uber-go/zap
//下载安装成功后还有如下提示:
package github.com/uber-go/zap: code in directory
src/github.com/uber-go/zap expects import "go.uber.org/zap"
3. 配置 zap Logger
zap 提供了两种类型的日志记录器—和 Logger 和 Sugared Logger 。两者之间的区别是:
- 在每一微秒和每一次内存分配都很重要的上下文中,使用Logger。它甚至比SugaredLogger更快,内存分配次数也更少,但它只支持强类型的结构化日志记录。
- 在性能很好但不是很关键的上下文中,使用SugaredLogger。它比其他结构化日志记录包快 4-10 倍,并且支持结构化和 printf 风格的日志记录。
- 所以一般场景下我们使用 Sugared Logger 就足够了。
3.1 Logger
- 通过调用zap.NewProduction()/zap.NewDevelopment()或者zap.NewExample()创建一个 Logger 。
- 上面的每一个函数都将创建一个 logger 。唯一的区别在于它将记录的信息不同。例如 production logger 默认记录调用函数信息、日期和时间等。
- 通过 Logger 调用 INFO 、 ERROR 等。
- 默认情况下日志都会打印到应用程序的 console 界面。
3.1.1 NewExample
//代码示例:
package main
import (
"go.uber.org/zap"
)
func main() {
log := zap.NewExample()
log.Debug("this is debug message")
log.Info("this is info message")
log.Info("this is info message with fileds",
zap.Int("age", 24), zap.String("agender", "man"))
log.Warn("this is warn message")
log.Error("this is error message")
log.Panic("this is panic message")
}
//输出结果:
{
"level":"debug","msg":"this is debug message"}
{
"level":"info","msg":"this is info message"}
{
"level":"info","msg":"this is info message with fileds","age":24,"agender":"man"}
{
"level":"warn","msg":"this is warn message"}
{
"level":"error","msg":"this is error message"}
{
"level":"panic","msg":"this is panic message"}
panic: this is panic message

最低0.47元/天 解锁文章
1万+






