序
本文次要钻研一下zerolog的Level
Level
github.com/rs/zerolog@v1.20.0/log.go
// Level defines log levels.type Level int8const ( // 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)func (l Level) String() string { switch l { case TraceLevel: return "trace" case DebugLevel: return "debug" case InfoLevel: return "info" case WarnLevel: return "warn" case ErrorLevel: return "error" case FatalLevel: return "fatal" case PanicLevel: return "panic" case NoLevel: return "" } return ""}
Level为int8类型,其中trace最小为-1,之后是debug、info、warn、error、fatal、panic、NoLevel及Disabled
log.Level
github.com/rs/zerolog@v1.20.0/log.go
func Trace() *zerolog.Event { return Logger.Trace()}func Debug() *zerolog.Event { return Logger.Debug()}func Info() *zerolog.Event { return Logger.Info()}func Warn() *zerolog.Event { return Logger.Warn()}func Error() *zerolog.Event { return Logger.Error()}func Fatal() *zerolog.Event { return Logger.Fatal()}func Panic() *zerolog.Event { return Logger.Panic()}
log.go提供了Trace、Debug、Info、Warn、Error、Fatal、Panic办法来创立*zerolog.Event
logger.newEvent
github.com/rs/zerolog@v1.20.0/log.go
func (l *Logger) Trace() *Event { return l.newEvent(TraceLevel, nil)}func (l *Logger) Debug() *Event { return l.newEvent(DebugLevel, nil)}func (l *Logger) Warn() *Event { return l.newEvent(WarnLevel, nil)}func (l *Logger) Error() *Event { return l.newEvent(ErrorLevel, nil)}func (l *Logger) Fatal() *Event { return l.newEvent(FatalLevel, func(msg string) { os.Exit(1) })}func (l *Logger) Panic() *Event { return l.newEvent(PanicLevel, func(msg string) { panic(msg) })}func (l *Logger) newEvent(level Level, done func(string)) *Event { enabled := l.should(level) if !enabled { return nil } e := newEvent(l.w, level) e.done = done e.ch = l.hooks if level != NoLevel { e.Str(LevelFieldName, LevelFieldMarshalFunc(level)) } if l.context != nil && len(l.context) > 1 { e.buf = enc.AppendObjectData(e.buf, l.context) } return e}
newEvent办法首先判断以后logger是否容许指定的level,不容许则间接返回nil;容许的话则通过event包的newEvent来新建event,设置done、hooks
event.newEvent
github.com/rs/zerolog@v1.20.0/event.go
func newEvent(w LevelWriter, level Level) *Event { e := eventPool.Get().(*Event) e.buf = e.buf[:0] e.ch = nil e.buf = enc.AppendBeginMarker(e.buf) e.w = w e.level = level e.stack = false return e}
newEvent办法从eventPool获取一个Event,而后重置一下其属性
WithLevel
github.com/rs/zerolog@v1.20.0/log/log.go
func WithLevel(level zerolog.Level) *zerolog.Event { return Logger.WithLevel(level)}func (l *Logger) WithLevel(level Level) *Event { switch level { case TraceLevel: return l.Trace() case DebugLevel: return l.Debug() case InfoLevel: return l.Info() case WarnLevel: return l.Warn() case ErrorLevel: return l.Error() case FatalLevel: return l.newEvent(FatalLevel, nil) case PanicLevel: return l.newEvent(PanicLevel, nil) case NoLevel: return l.Log() case Disabled: return nil default: panic("zerolog: WithLevel(): invalid level: " + strconv.Itoa(int(level))) }}
WithLevel能够动静传入Level,而后返回指定level的event
SetGlobalLevel
github.com/rs/zerolog@v1.20.0/ctx.go
func init() { SetGlobalLevel(TraceLevel) l := Nop() disabledLogger = &l}
默认是TraceLevel
实例
func withLevelDemo() { log.WithLevel(zerolog.TraceLevel).Msg("trace level") log.WithLevel(zerolog.DebugLevel).Msg("debug level") log.WithLevel(zerolog.InfoLevel).Msg("info level")}
输入
{"level":"trace","time":"2021-01-03T20:59:42+08:00","message":"trace level"}{"level":"debug","time":"2021-01-03T20:59:42+08:00","message":"debug level"}{"level":"info","time":"2021-01-03T20:59:42+08:00","message":"info level"}
小结
Level为int8类型,其中trace最小为-1,之后是debug、info、warn、error、fatal、panic、NoLevel及Disabled;log.go提供了Trace、Debug、Info、Warn、Error、Fatal、Panic办法来创立*zerolog.Event
;WithLevel能够动静传入Level,而后返回指定level的event。
doc
- zerolog