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
}

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

你可能感兴趣的:(GO,golang,开发语言,后端)