gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/debug/log/log.go (about) 1 // Package log provides debug logging 2 package log 3 4 import ( 5 "fmt" 6 "os" 7 "time" 8 ) 9 10 var ( 11 // DefaultLog logger 12 DefaultLog = NewLog() 13 // DefaultLevel is default log level 14 DefaultLevel = LevelInfo 15 // prefix for all messages 16 prefix string 17 ) 18 19 // Log is event log 20 type Log interface { 21 // Read reads log entries from the logger 22 Read(...ReadOption) []Record 23 // Write writes records to log 24 Write(Record) 25 // Stream log records 26 Stream(chan bool) <-chan Record 27 } 28 29 // Record is log record entry 30 type Record struct { 31 // Timestamp of logged event 32 Timestamp time.Time 33 // Value contains log entry 34 Value interface{} 35 // Metadata to enrich log record 36 Metadata map[string]string 37 } 38 39 // level is a log level 40 type Level int 41 42 const ( 43 LevelFatal Level = iota 44 LevelError 45 LevelInfo 46 LevelWarn 47 LevelDebug 48 LevelTrace 49 ) 50 51 func init() { 52 switch os.Getenv("MICRO_LOG_LEVEL") { 53 case "trace": 54 DefaultLevel = LevelTrace 55 case "debug": 56 DefaultLevel = LevelDebug 57 case "warn": 58 DefaultLevel = LevelWarn 59 case "info": 60 DefaultLevel = LevelInfo 61 case "error": 62 DefaultLevel = LevelError 63 case "fatal": 64 DefaultLevel = LevelFatal 65 } 66 } 67 68 func log(v ...interface{}) { 69 if len(prefix) > 0 { 70 DefaultLog.Write(Record{Value: fmt.Sprint(append([]interface{}{prefix, " "}, v...)...)}) 71 return 72 } 73 DefaultLog.Write(Record{Value: fmt.Sprint(v...)}) 74 } 75 76 func logf(format string, v ...interface{}) { 77 if len(prefix) > 0 { 78 format = prefix + " " + format 79 } 80 DefaultLog.Write(Record{Value: fmt.Sprintf(format, v...)}) 81 } 82 83 // WithLevel logs with the level specified 84 func WithLevel(l Level, v ...interface{}) { 85 if l > DefaultLevel { 86 return 87 } 88 log(v...) 89 } 90 91 // WithLevel logs with the level specified 92 func WithLevelf(l Level, format string, v ...interface{}) { 93 if l > DefaultLevel { 94 return 95 } 96 logf(format, v...) 97 } 98 99 // Trace provides trace level logging 100 func Trace(v ...interface{}) { 101 WithLevel(LevelTrace, v...) 102 } 103 104 // Tracef provides trace level logging 105 func Tracef(format string, v ...interface{}) { 106 WithLevelf(LevelTrace, format, v...) 107 } 108 109 // Debug provides debug level logging 110 func Debug(v ...interface{}) { 111 WithLevel(LevelDebug, v...) 112 } 113 114 // Debugf provides debug level logging 115 func Debugf(format string, v ...interface{}) { 116 WithLevelf(LevelDebug, format, v...) 117 } 118 119 // Warn provides warn level logging 120 func Warn(v ...interface{}) { 121 WithLevel(LevelWarn, v...) 122 } 123 124 // Warnf provides warn level logging 125 func Warnf(format string, v ...interface{}) { 126 WithLevelf(LevelWarn, format, v...) 127 } 128 129 // Info provides info level logging 130 func Info(v ...interface{}) { 131 WithLevel(LevelInfo, v...) 132 } 133 134 // Infof provides info level logging 135 func Infof(format string, v ...interface{}) { 136 WithLevelf(LevelInfo, format, v...) 137 } 138 139 // Error provides warn level logging 140 func Error(v ...interface{}) { 141 WithLevel(LevelError, v...) 142 } 143 144 // Errorf provides warn level logging 145 func Errorf(format string, v ...interface{}) { 146 WithLevelf(LevelError, format, v...) 147 } 148 149 // Fatal logs with Log and then exits with os.Exit(1) 150 func Fatal(v ...interface{}) { 151 WithLevel(LevelFatal, v...) 152 os.Exit(1) 153 } 154 155 // Fatalf logs with Logf and then exits with os.Exit(1) 156 func Fatalf(format string, v ...interface{}) { 157 WithLevelf(LevelFatal, format, v...) 158 os.Exit(1) 159 } 160 161 // SetLevel sets the log level 162 func SetLevel(l Level) { 163 DefaultLevel = l 164 } 165 166 // GetLevel returns the current level 167 func GetLevel() Level { 168 return DefaultLevel 169 } 170 171 // Set a prefix for the logger 172 func SetPrefix(p string) { 173 prefix = p 174 } 175 176 // Set service name 177 func Name(name string) { 178 prefix = fmt.Sprintf("[%s]", name) 179 }