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