golang 第三方库 zerolog

官网 https://zerolog.io/
安装 go get -u github.com/rs/zerolog/log

标准库log做为标准,但功能过于简单,连日志级别都没有
zap是Uber的开源高性能日志库
zerolog更注重开发体验,高性能、有日志级别、链式API,json格式日志记录,号称0内存分配

log.Print()、log.Printf()方法使用方式和标准库log模块类似。

源码中定义的日志级别

type Level int8

const (
	// DebugLevel defines debug log level.
	DebugLevel Level = iota
	// InfoLevel defines info log level.
	InfoLevel
	// WarnLevel defines warn log level.
	WarnLevel
	// ErrorLevel defines error log level.
	ErrorLevel
	// FatalLevel defines fatal log level.
	FatalLevel
	// PanicLevel defines panic log level.
	PanicLevel
	// NoLevel defines an absent log level.
	NoLevel
	// Disabled disables the logger.
	Disabled

	// TraceLevel defines trace log level.
	TraceLevel Level = -1
	// Values less than TraceLevel are handled as numbers.



)

定义级别

zerolog.SetGlobalLevel(zerolog.Disabled) //全局定义级别
l3.Level(zerolog.DebugLevel) //子logger定义级别

源码中创建子logger

// Logger is the global logger.
var Logger = zerolog.New(os.Stderr).With().Timestamp().Logger()

见下面代码

package main

import (
	"fmt"
	"os"

	"github.com/rs/zerolog"
	"github.com/rs/zerolog/log"
)

func main() {

	log.Print("zerolog") //日志输出
	log.Info().Msg("info msg")
	log.Debug().Msg("debug msg")
	fmt.Println(int(zerolog.GlobalLevel())) //全局的日志级别(Zerolog) //-1
	zerolog.SetGlobalLevel(zerolog.Disabled)

	//方式一:  创建子logger l1     控制台输出
	l1 := log.Logger.Level(zerolog.InfoLevel)
	fmt.Println(l1.GetLevel()) //打印l1的日志级别
	l1.Warn().Msg("l1 warn msg")

	//方式二: 创建子logger l2    链式定义   
	l2 := zerolog.New(os.Stdout).With().Timestamp().Logger()
	l2.Level(0) //修改定义日志级别

	l2.Info().Msg("l2 info msg")
	l2.Debug().Msg("l2 info msg")
	fmt.Println(int(l2.GetLevel())) //-1	 //打印 l2的日志级别

	//文件输出,给下面的l3做输入
	f3, err := os.OpenFile("d:/f1.txt",
		os.O_CREATE|os.O_RDONLY|os.O_TRUNC,  //os.O_TRUNC 清空内容,重新输入  
		os.ModePerm,						//os.O_APPEND 追加输入  二选择1	
	)
	if err != nil {
		log.Panic().Err(err).Send() // 内部调用panic
	}
	defer f3.Close()

	//创建子logger l3
	l3 := zerolog.New(f3).With().Caller().Timestamp().Logger().Level(2)

	l3.Debug().Msg("l3 debug msg") //此行打印不出来,因为消息级别为-1
	l3.Warn().Msg("l3 warn msg")
	l3.Error().Msg("l3 error msg")

	//os.Stderr
	// os.Stdin
	//os.Stdout



}

时间格式输出


	//修改子logger l4的时间输出格式
	l4 := zerolog.New(os.Stdout).With().Str("time", time.Now().Format("2006/1/2 15:4:3 -0700")).Logger().Level(-1)
	l4.Warn().Msg("l4 warn")
	//输出结果
	//{"level":"warn","time":"2023/7/24 11:50:11 +0800","message":"l4 warn"}

	//修改全局日志级别
	//zerolog.SetGlobalLevel(0)

	//修改全局时间格式
	zerolog.TimeFieldFormat = zerolog.TimeFormatUnixMs   //修改为毫秒级时间戳   zerolog.TimeFormatUnix为秒级
	zerolog.TimeFieldFormat = "2006-1-2 15:4:3 -0700" //修改全局时间格式
	
	l3.Warn().Msg("l32 warn")  
	//结果为:{"level":"warn","caller":"e:/gocode/log/main.go:65","time":"2023-7-24 12:3:12 +0800","message":"l32 warn"},l3定义时加了定位代码行 .With().Caller()

将结果输出至变量中

	//将日志存于变量中  bytes.Buffer 或 strings.Builder, 
	//这两个类型都实现了 io.Writer 接口,因此可以将其作为参数传递给日志库的输出方法。
	var buf bytes.Buffer
	logs := zerolog.New(&buf)
	logs.Warn().Msg("aaa")

	env1 := buf.String()
	fmt.Printf("env1: %T %[1]v \n", env1)
	//输出结果:env1: string {"level":"warn","message":"aaa"}

-------------------end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值