github.com/scottcagno/storage@v1.8.0/pkg/lsmtree/logger.go (about) 1 package lsmtree 2 3 import ( 4 "fmt" 5 "log" 6 "os" 7 ) 8 9 type logLevel = uint8 10 11 const ( 12 LevelDebug logLevel = iota 13 LevelInfo 14 LevelWarn 15 LevelError 16 LevelFatal 17 LevelOff 18 ) 19 20 func LevelText(level logLevel) string { 21 switch level { 22 case LevelDebug: 23 return "Level=Debug" 24 case LevelInfo: 25 return "Level=Info" 26 case LevelWarn: 27 return "Level=Warn" 28 case LevelError: 29 return "Level=Error" 30 case LevelFatal: 31 return "Level=Fatal" 32 case LevelOff: 33 return "Level=Off" 34 default: 35 return "Level=Unknown" 36 } 37 } 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 }