github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/pkg/logger/level.go (about) 1 package logger 2 3 import ( 4 "errors" 5 "fmt" 6 "strings" 7 ) 8 9 // Level type 10 type Level uint8 11 12 // These are the different logging levels. 13 const ( 14 // levelUnknown represent an unparsable level 15 levelUnknown Level = iota 16 17 // ErrorLevel logs important errors when failure append. 18 ErrorLevel 19 20 // WarnLevel logs non critical entries that deserve some intention. 21 WarnLevel 22 23 // InfoLevel log general operational entries about what's going on inside 24 // the application. 25 InfoLevel 26 27 // DebugLevel logs is only enabled when debugging is setup. It can be 28 // very verbose logging and should be activated only on a limited period. 29 DebugLevel 30 ) 31 32 var ( 33 ErrInvalidLevel = errors.New("not a valid logging Level") 34 ) 35 36 // String converts the Level to a string. E.g. LevelDebug becomes "debug". 37 func (level Level) String() string { 38 if b, err := level.MarshalText(); err == nil { 39 return string(b) 40 } 41 42 return "unknown" 43 } 44 45 // ParseLevel takes a string level and returns the log level constant. 46 func ParseLevel(lvl string) (Level, error) { 47 switch strings.ToLower(lvl) { 48 case "error": 49 return ErrorLevel, nil 50 case "warn", "warning": 51 return WarnLevel, nil 52 case "info": 53 return InfoLevel, nil 54 case "debug": 55 return DebugLevel, nil 56 } 57 58 return levelUnknown, fmt.Errorf("%q: %w", lvl, ErrInvalidLevel) 59 } 60 61 // UnmarshalText implements encoding.TextUnmarshaler. 62 func (level *Level) UnmarshalText(text []byte) error { 63 l, err := ParseLevel(string(text)) 64 if err != nil { 65 return err 66 } 67 68 *level = l 69 70 return nil 71 } 72 73 // MarshalText implements encoding.TextMarshaler. 74 func (level Level) MarshalText() ([]byte, error) { 75 switch level { 76 case DebugLevel: 77 return []byte("debug"), nil 78 case InfoLevel: 79 return []byte("info"), nil 80 case WarnLevel: 81 return []byte("warning"), nil 82 case ErrorLevel: 83 return []byte("error"), nil 84 } 85 86 return nil, fmt.Errorf("not a valid logging level %d", level) 87 }