github.com/MetalBlockchain/metalgo@v1.11.9/utils/logging/level.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package logging 5 6 import ( 7 "encoding/json" 8 "errors" 9 "fmt" 10 "strings" 11 12 "go.uber.org/zap/zapcore" 13 ) 14 15 type Level zapcore.Level 16 17 const ( 18 Verbo Level = iota - 9 19 Debug 20 Trace 21 Info 22 Warn 23 Error 24 Fatal 25 Off 26 27 fatalStr = "FATAL" 28 errorStr = "ERROR" 29 warnStr = "WARN" 30 infoStr = "INFO" 31 traceStr = "TRACE" 32 debugStr = "DEBUG" 33 verboStr = "VERBO" 34 offStr = "OFF" 35 unknownStr = "UNKNO" 36 37 fatalLowStr = "fatal" 38 errorLowStr = "error" 39 warnLowStr = "warn" 40 infoLowStr = "info" 41 traceLowStr = "trace" 42 debugLowStr = "debug" 43 verboLowStr = "verbo" 44 offLowStr = "off" 45 unknownLowStr = "unkno" 46 ) 47 48 var ErrUnknownLevel = errors.New("unknown log level") 49 50 // Inverse of Level.String() 51 func ToLevel(l string) (Level, error) { 52 switch strings.ToUpper(l) { 53 case offStr: 54 return Off, nil 55 case fatalStr: 56 return Fatal, nil 57 case errorStr: 58 return Error, nil 59 case warnStr: 60 return Warn, nil 61 case infoStr: 62 return Info, nil 63 case traceStr: 64 return Trace, nil 65 case debugStr: 66 return Debug, nil 67 case verboStr: 68 return Verbo, nil 69 default: 70 return Off, fmt.Errorf("%w: %q", ErrUnknownLevel, l) 71 } 72 } 73 74 func (l Level) String() string { 75 switch l { 76 case Off: 77 return offStr 78 case Fatal: 79 return fatalStr 80 case Error: 81 return errorStr 82 case Warn: 83 return warnStr 84 case Info: 85 return infoStr 86 case Trace: 87 return traceStr 88 case Debug: 89 return debugStr 90 case Verbo: 91 return verboStr 92 default: 93 // This should never happen 94 return unknownStr 95 } 96 } 97 98 func (l Level) LowerString() string { 99 switch l { 100 case Off: 101 return offLowStr 102 case Fatal: 103 return fatalLowStr 104 case Error: 105 return errorLowStr 106 case Warn: 107 return warnLowStr 108 case Info: 109 return infoLowStr 110 case Trace: 111 return traceLowStr 112 case Debug: 113 return debugLowStr 114 case Verbo: 115 return verboLowStr 116 default: 117 // This should never happen 118 return unknownLowStr 119 } 120 } 121 122 func (l Level) MarshalJSON() ([]byte, error) { 123 return json.Marshal(l.String()) 124 } 125 126 func (l *Level) UnmarshalJSON(b []byte) error { 127 var str string 128 if err := json.Unmarshal(b, &str); err != nil { 129 return err 130 } 131 var err error 132 *l, err = ToLevel(str) 133 return err 134 }