github.com/goravel/framework@v1.13.9/contracts/log/level.go (about) 1 package log 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/sirupsen/logrus" 8 ) 9 10 type Level logrus.Level 11 12 // Convert the Level to a string. E.g. PanicLevel becomes "panic". 13 func (level Level) String() string { 14 if b, err := level.MarshalText(); err == nil { 15 return string(b) 16 } else { 17 return "unknown" 18 } 19 } 20 21 // ParseLevel takes a string level and returns the Logrus log level constant. 22 func ParseLevel(lvl string) (Level, error) { 23 switch strings.ToLower(lvl) { 24 case "panic": 25 return PanicLevel, nil 26 case "fatal": 27 return FatalLevel, nil 28 case "error": 29 return ErrorLevel, nil 30 case "warn", "warning": 31 return WarningLevel, nil 32 case "info": 33 return InfoLevel, nil 34 case "debug": 35 return DebugLevel, nil 36 } 37 38 var l Level 39 return l, fmt.Errorf("not a valid logrus Level: %q", lvl) 40 } 41 42 // UnmarshalText implements encoding.TextUnmarshaler. 43 func (level *Level) UnmarshalText(text []byte) error { 44 l, err := ParseLevel(string(text)) 45 if err != nil { 46 return err 47 } 48 49 *level = l 50 51 return nil 52 } 53 54 func (level Level) MarshalText() ([]byte, error) { 55 switch level { 56 case DebugLevel: 57 return []byte("debug"), nil 58 case InfoLevel: 59 return []byte("info"), nil 60 case WarningLevel: 61 return []byte("warning"), nil 62 case ErrorLevel: 63 return []byte("error"), nil 64 case FatalLevel: 65 return []byte("fatal"), nil 66 case PanicLevel: 67 return []byte("panic"), nil 68 } 69 70 return nil, fmt.Errorf("not a valid logrus level %d", level) 71 }