zerolog是一個(gè)高性能喧伞,支持日志等級(jí)窟她,鉤子的結(jié)構(gòu)化日志庫纸泡。log的Print()和Printf()方法默認(rèn)輸出到os.Stderr漂问,默認(rèn)日志等級(jí)為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"}
日志等級(jí)
zerolog有下面幾種日志等級(jí)蚤假,調(diào)用zerolog.SetGlobalLevel()設(shè)置日志等級(jí)。
- 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)
添加數(shù)據(jù)到上下文
zerolog可以將數(shù)據(jù)以key-value對(duì)的形式添加到一條日志事件的上下文中吧兔,重復(fù)的key-value對(duì)不會(huì)刪除磷仰。調(diào)用Msg方法輸出日志,也可以調(diào)用Send方法輸出日志境蔼,其本質(zhì)是調(diào)用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可以創(chuàng)建不同的logger實(shí)例來輸出日志伺通,下面代碼創(chuàng)建了一個(gè)新的logger替換了log的logger,其中zerolog.ConsoleWriter可以使輸出的日志更加友好民逼,日志等級(jí)變?yōu)椴噬摹?/p>
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")
}
鉤子
利用鉤子可以攔截日志事件,從而實(shí)現(xiàn)各種擴(kuò)展功能涮帘,例如將日志輸出到文件拼苍。
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"}