package level import ( "encoding" "encoding/json" "strings" ) //go:generate stringer -type=Level -linecomment var ( _ json.Marshaler = Level(0) _ json.Unmarshaler = (*Level)(nil) _ encoding.TextMarshaler = Level(0) _ encoding.TextUnmarshaler = (*Level)(nil) _ encoding.BinaryMarshaler = Level(0) _ encoding.BinaryUnmarshaler = (*Level)(nil) ) // Level log. type Level uint32 // available log levels. const ( Emergency Level = iota // emerg Alert // alert Critical // crit Error // error Warning // warning Notice // notice Info // info Debug // debug ) func (l Level) Is(level Level) bool { return level == l } func (l Level) Enabled(level Level) bool { return l <= level } func (l Level) MarshalJSON() ([]byte, error) { return []byte("\"" + l.String() + "\""), nil } func (l *Level) UnmarshalJSON(in []byte) error { lvl := Parse(string(in[1 : len(in)-1])) *l = lvl return nil } func (l Level) MarshalText() ([]byte, error) { return []byte(l.String()), nil } func (l *Level) UnmarshalText(in []byte) error { lvl := Parse(string(in)) *l = lvl return nil } func (l Level) MarshalBinary() ([]byte, error) { return []byte(l.String()), nil } func (l *Level) UnmarshalBinary(in []byte) error { lvl := Parse(string(in)) *l = lvl return nil } func Parse(lvl string) Level { switch strings.ToLower(lvl) { case "debug", "Debug", "DEBUG": return Debug case "info", "Info", "INFO": return Info case "notice", "Notice", "NOTICE": return Notice case "warning", "Warning", "WARNING", "warm", "Warm", "WARN": return Warning case "error", "Error", "ERROR", "err", "Err", "ERR": return Error case "critical", "Critical", "CRITICAL", "crit", "Crit", "CRIT": return Critical case "alert", "Alert", "ALERT": return Alert default: return Emergency } }