Golang學習筆記-zerolog

zerolog是一個高性能,支持日誌等級,鉤子的結構化日誌庫。log的Print()和Printf()方法默認輸出到os.Stderr,默認日誌等級爲debug,用法和官方log庫相同。

package main

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


func main(){
	zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
	log.Print("hello world")
}
{"level":"debug","time":1576398679,"message":"hello world"}

日誌等級

zerolog有下面幾種日誌等級,調用zerolog.SetGlobalLevel()設置日誌等級。

  • panic (zerolog.PanicLevel, 5)
  • fatal (zerolog.FatalLevel, 4)
  • error (zerolog.ErrorLevel, 3)
  • warn (zerolog.WarnLevel, 2)
  • info (zerolog.InfoLevel, 1)
  • debug (zerolog.DebugLevel, 0)
  • trace (zerolog.TraceLevel, -1)

添加數據到上下文

zerolog可以將數據以key-value對的形式添加到一條日誌事件的上下文中,重複的key-value對不會刪除。調用Msg方法輸出日誌,也可以調用Send方法輸出日誌,其本質是調用Msg("")。

package main

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


func main(){
	log.Debug().
		Str("name", "xy").
		Str("name", "xy").
		Float64("height", 100.0).
		Msg("create object")
}

{"level":"debug","name":"xy","name":"xy","height":100,"time":"2019-12-15T17:17:46+08:00","message":"create object"}

自定義字段名

package main

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


func main(){
	zerolog.TimestampFieldName = "t"
	zerolog.LevelFieldName = "l"
	zerolog.MessageFieldName = "m"
	log.Debug().
		Str("name", "xy").
		Float64("height", 100.0).
		Msg("create object")
}
{"l":"debug","name":"xy","height":100,"t":"2019-12-15T17:04:24+08:00","m":"create object"}

添加文件名和代碼行

package main

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


func main(){
	log.Logger = log.With().Caller().Logger()
	log.Info().Msg("hello world")
}

{"level":"info","time":"2019-12-15T17:13:02+08:00","caller":"C:/Users/Administrator/go/src/studygo/main.go:10","message":"hello world"}

logger

zerolog可以創建不同的logger實例來輸出日誌,下面代碼創建了一個新的logger替換了log的logger,其中zerolog.ConsoleWriter可以使輸出的日誌更加友好,日誌等級變爲彩色的。

package main

import (
	"github.com/rs/zerolog"
	"github.com/rs/zerolog/log"
	"os"
)


func main(){
	log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr,TimeFormat: "2006-01-02 15:04:05.000"})
	log.Info().Msg("hello world")
}

鉤子

利用鉤子可以攔截日誌事件,從而實現各種擴展功能,例如將日誌輸出到文件。

package main

import (
	"fmt"
	"github.com/rs/zerolog"
	"github.com/rs/zerolog/log"
)

type LogHook struct{}

func (hook LogHook) Run(e *zerolog.Event, level zerolog.Level, msg string) {
	fmt.Println(msg)
}

func main(){
	log.Logger=log.Hook(LogHook{})
	log.Info().Msg("hello world")
}

hello world
{"level":"info","time":"2019-12-15T17:28:58+08:00","message":"hello world"}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章