github.com/scottcagno/storage@v1.8.0/pkg/lsmt/logger.go (about) 1 package lsmt 2 3 import ( 4 "fmt" 5 "log" 6 "os" 7 ) 8 9 const ( 10 LevelDebug logLevel = iota 11 LevelInfo 12 LevelWarn 13 LevelError 14 LevelFatal 15 LevelOff 16 ) 17 18 func LevelText(level logLevel) string { 19 switch level { 20 case LevelDebug: 21 return "Level=Debug" 22 case LevelInfo: 23 return "Level=Info" 24 case LevelWarn: 25 return "Level=Warn" 26 case LevelError: 27 return "Level=Error" 28 case LevelFatal: 29 return "Level=Fatal" 30 case LevelOff: 31 return "Level=Off" 32 default: 33 return "Level=Unknown" 34 } 35 } 36 37 type logLevel int 38 39 type Logger struct { 40 *log.Logger 41 level logLevel 42 } 43 44 func NewLogger(level logLevel) *Logger { 45 return &Logger{ 46 Logger: log.New(os.Stderr, "", log.LstdFlags), 47 level: level, 48 } 49 } 50 51 func (l *Logger) Debug(s string, a ...interface{}) { 52 if l.level > LevelDebug { 53 return 54 } 55 ls := fmt.Sprintf("| DEBUG | %s", s) 56 if a == nil || len(a) == 0 { 57 l.Println(ls) 58 return 59 } 60 l.Printf(ls, a...) 61 } 62 63 func (l *Logger) Info(s string, a ...interface{}) { 64 if l.level > LevelInfo { 65 return 66 } 67 ls := fmt.Sprintf("| INFO | %s", s) 68 if a == nil || len(a) == 0 { 69 l.Println(ls) 70 return 71 } 72 l.Printf(ls, a...) 73 } 74 75 func (l *Logger) Warn(s string, a ...interface{}) { 76 if l.level > LevelWarn { 77 return 78 } 79 ls := fmt.Sprintf("| WARN | %s", s) 80 if a == nil || len(a) == 0 { 81 l.Println(ls) 82 return 83 } 84 l.Printf(ls, a...) 85 } 86 87 func (l *Logger) Error(s string, a ...interface{}) { 88 if l.level > LevelError { 89 return 90 } 91 ls := fmt.Sprintf("| ERROR | %s", s) 92 if a == nil || len(a) == 0 { 93 l.Println(ls) 94 return 95 } 96 l.Printf(ls, a...) 97 } 98 99 func (l *Logger) Fatal(s string, a ...interface{}) { 100 if l.level > LevelFatal { 101 return 102 } 103 ls := fmt.Sprintf("| FATAL | %s", s) 104 if a == nil || len(a) == 0 { 105 l.Fatalln(ls) 106 } 107 l.Fatalf(ls, a...) 108 }