golang zap日志库

Zap提供了两种类型的日志记录器—Sugared Logger和Logger。官网
在性能很好但不是很关键的上下文中,使用SugaredLogger。它比其他结构化日志记录包快4-10倍,并且支持结构化和printf风格的日志记录。
在每一微秒和每一次内存分配都很重要的上下文中,使用Logger。它甚至比SugaredLogger更快,内存分配次数也更少,但它只支持强类型的结构化日志记录
安装

go get -u go.uber.org/zap

zap生产环境zap.NewProduction()和开发环境zap.NewDevelopment()

开发环境输出格式
在这里插入图片描述

生产环境输出格式
在这里插入图片描述
Sugared Logger模式

package main

import (
	"go.uber.org/zap"
)

func main() {
	logger, _ := zap.NewDevelopment()
	defer logger.Sync() // flushes buffer, if any
	url := "https://baidu.com"
	sugar := logger.Sugar()
	sugar.Infow("failed to fetch URL",
		// Structured context as loosely typed key-value pairs.
		"url", url,
		"attempt", 3,
	)
	sugar.Infof("Failed to fetch URL: %s", url)
}

Logger模式

package main

import (
	"go.uber.org/zap"
)

func main() {
	logger, _ := zap.NewDevelopment()
	defer logger.Sync() // flushes buffer, if any
	url := "https://baidu.com"
	logger.Info("failed to fetch URL",
		zap.String("url", url),
		zap.Int("nums", 3))
}

suger模式将日志输出到文件中,配置stderr或stdout即可将日志打印

package main

import (
	"time"

	"go.uber.org/zap"
)

func NewLogger() (*zap.Logger, error) {
	cfg := zap.NewProductionConfig()
	cfg.OutputPaths = []string{
		"./myproject.log",
		"stderr",
	}
	return cfg.Build()
}

func main() {
	logger, err := NewLogger()
	if err != nil {
		panic(err)
		//panic("初始化logger失败")
	}
	su := logger.Sugar()
	defer su.Sync()
	url := "https://baidu.com"
	su.Info("failed to fetch URL",
		// Structured context as strongly typed Field values.
		zap.String("url", url),
		zap.Int("attempt", 3),
		zap.Duration("backoff", time.Second),
	)
}

zap的便捷使用,通过zap.ReplaceGlobals初始后logger之后可以直接通过zap.S()和zap.L()使用zap,S函数和L函数很有用,提供了全局的安全访问logger的途径。

package main

import "go.uber.org/zap"

func main() {
	logger, _ := zap.NewProduction()
	zap.ReplaceGlobals(logger)
	zap.S().Infof("启动服务器,端口:%d", 8080)
}

日志是分级别的Debug、Info、Warn、Error和Fetal,开发模式所有级别的日志都会打印,生产模式只会打印Info以上的级别的日志。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值