github.com/micro/go-micro/v2@v2.9.1/util/log/log.go (about) 1 // Package log is a global internal logger 2 // DEPRECATED: this is frozen package, use github.com/micro/go-micro/v2/logger 3 package log 4 5 import ( 6 "fmt" 7 "os" 8 "sync/atomic" 9 10 dlog "github.com/micro/go-micro/v2/debug/log" 11 nlog "github.com/micro/go-micro/v2/logger" 12 ) 13 14 // level is a log level 15 type Level int32 16 17 const ( 18 LevelFatal Level = iota 19 LevelError 20 LevelWarn 21 LevelInfo 22 LevelDebug 23 LevelTrace 24 ) 25 26 type elog struct { 27 dlog dlog.Log 28 } 29 30 var ( 31 // the local logger 32 logger dlog.Log = &elog{} 33 34 // default log level is info 35 level = LevelInfo 36 37 // prefix for all messages 38 prefix string 39 ) 40 41 func levelToLevel(l Level) nlog.Level { 42 switch l { 43 case LevelTrace: 44 return nlog.TraceLevel 45 case LevelDebug: 46 return nlog.DebugLevel 47 case LevelWarn: 48 return nlog.WarnLevel 49 case LevelInfo: 50 return nlog.InfoLevel 51 case LevelError: 52 return nlog.ErrorLevel 53 case LevelFatal: 54 return nlog.FatalLevel 55 } 56 return nlog.InfoLevel 57 } 58 59 func init() { 60 switch os.Getenv("MICRO_LOG_LEVEL") { 61 case "trace": 62 level = LevelTrace 63 case "debug": 64 level = LevelDebug 65 case "warn": 66 level = LevelWarn 67 case "info": 68 level = LevelInfo 69 case "error": 70 level = LevelError 71 case "fatal": 72 level = LevelFatal 73 } 74 } 75 76 func (l Level) String() string { 77 switch l { 78 case LevelTrace: 79 return "trace" 80 case LevelDebug: 81 return "debug" 82 case LevelWarn: 83 return "warn" 84 case LevelInfo: 85 return "info" 86 case LevelError: 87 return "error" 88 case LevelFatal: 89 return "fatal" 90 default: 91 return "unknown" 92 } 93 } 94 95 func (el *elog) Read(opt ...dlog.ReadOption) ([]dlog.Record, error) { 96 return el.dlog.Read(opt...) 97 } 98 99 func (el *elog) Write(r dlog.Record) error { 100 return el.dlog.Write(r) 101 } 102 103 func (el *elog) Stream() (dlog.Stream, error) { 104 return el.dlog.Stream() 105 } 106 107 // Log makes use of github.com/micro/debug/log 108 func Log(v ...interface{}) { 109 if len(prefix) > 0 { 110 v = append([]interface{}{prefix, " "}, v...) 111 } 112 nlog.DefaultLogger.Log(levelToLevel(level), v) 113 } 114 115 // Logf makes use of github.com/micro/debug/log 116 func Logf(format string, v ...interface{}) { 117 if len(prefix) > 0 { 118 format = prefix + " " + format 119 } 120 nlog.DefaultLogger.Log(levelToLevel(level), format, v) 121 } 122 123 // WithLevel logs with the level specified 124 func WithLevel(l Level, v ...interface{}) { 125 if l > level { 126 return 127 } 128 Log(v...) 129 } 130 131 // WithLevel logs with the level specified 132 func WithLevelf(l Level, format string, v ...interface{}) { 133 if l > level { 134 return 135 } 136 Logf(format, v...) 137 } 138 139 // Trace provides trace level logging 140 func Trace(v ...interface{}) { 141 WithLevel(LevelTrace, v...) 142 } 143 144 // Tracef provides trace level logging 145 func Tracef(format string, v ...interface{}) { 146 WithLevelf(LevelTrace, format, v...) 147 } 148 149 // Debug provides debug level logging 150 func Debug(v ...interface{}) { 151 WithLevel(LevelDebug, v...) 152 } 153 154 // Debugf provides debug level logging 155 func Debugf(format string, v ...interface{}) { 156 WithLevelf(LevelDebug, format, v...) 157 } 158 159 // Warn provides warn level logging 160 func Warn(v ...interface{}) { 161 WithLevel(LevelWarn, v...) 162 } 163 164 // Warnf provides warn level logging 165 func Warnf(format string, v ...interface{}) { 166 WithLevelf(LevelWarn, format, v...) 167 } 168 169 // Info provides info level logging 170 func Info(v ...interface{}) { 171 WithLevel(LevelInfo, v...) 172 } 173 174 // Infof provides info level logging 175 func Infof(format string, v ...interface{}) { 176 WithLevelf(LevelInfo, format, v...) 177 } 178 179 // Error provides warn level logging 180 func Error(v ...interface{}) { 181 WithLevel(LevelError, v...) 182 } 183 184 // Errorf provides warn level logging 185 func Errorf(format string, v ...interface{}) { 186 WithLevelf(LevelError, format, v...) 187 } 188 189 // Fatal logs with Log and then exits with os.Exit(1) 190 func Fatal(v ...interface{}) { 191 WithLevel(LevelFatal, v...) 192 } 193 194 // Fatalf logs with Logf and then exits with os.Exit(1) 195 func Fatalf(format string, v ...interface{}) { 196 WithLevelf(LevelFatal, format, v...) 197 } 198 199 // SetLogger sets the local logger 200 func SetLogger(l dlog.Log) { 201 logger = l 202 } 203 204 // GetLogger returns the local logger 205 func GetLogger() dlog.Log { 206 return logger 207 } 208 209 // SetLevel sets the log level 210 func SetLevel(l Level) { 211 atomic.StoreInt32((*int32)(&level), int32(l)) 212 } 213 214 // GetLevel returns the current level 215 func GetLevel() Level { 216 return level 217 } 218 219 // Set a prefix for the logger 220 func SetPrefix(p string) { 221 prefix = p 222 } 223 224 // Set service name 225 func Name(name string) { 226 prefix = fmt.Sprintf("[%s]", name) 227 }