github.com/saferwall/pe@v1.5.2/log/global.go (about) 1 package log 2 3 import ( 4 "sync" 5 ) 6 7 // globalLogger is designed as a global logger in current process. 8 var global = &loggerAppliance{} 9 10 // loggerAppliance is the proxy of `Logger` to 11 // make logger change will affect all sub-logger. 12 type loggerAppliance struct { 13 lock sync.Mutex 14 Logger 15 helper *Helper 16 } 17 18 func init() { 19 global.SetLogger(DefaultLogger) 20 } 21 22 func (a *loggerAppliance) SetLogger(in Logger) { 23 a.lock.Lock() 24 defer a.lock.Unlock() 25 a.Logger = in 26 a.helper = NewHelper(a.Logger) 27 } 28 29 func (a *loggerAppliance) GetLogger() Logger { 30 return a.Logger 31 } 32 33 // SetLogger should be called before any other log call. 34 // And it is NOT THREAD SAFE. 35 func SetLogger(logger Logger) { 36 global.SetLogger(logger) 37 } 38 39 // GetLogger returns global logger appliance as logger in current process. 40 func GetLogger() Logger { 41 return global 42 } 43 44 // Log Print log by level and keyvals. 45 func Log(level Level, keyvals ...interface{}) { 46 global.helper.Log(level, keyvals...) 47 } 48 49 // Debug logs a message at debug level. 50 func Debug(a ...interface{}) { 51 global.helper.Debug(a...) 52 } 53 54 // Debugf logs a message at debug level. 55 func Debugf(format string, a ...interface{}) { 56 global.helper.Debugf(format, a...) 57 } 58 59 // Debugw logs a message at debug level. 60 func Debugw(keyvals ...interface{}) { 61 global.helper.Debugw(keyvals...) 62 } 63 64 // Info logs a message at info level. 65 func Info(a ...interface{}) { 66 global.helper.Info(a...) 67 } 68 69 // Infof logs a message at info level. 70 func Infof(format string, a ...interface{}) { 71 global.helper.Infof(format, a...) 72 } 73 74 // Infow logs a message at info level. 75 func Infow(keyvals ...interface{}) { 76 global.helper.Infow(keyvals...) 77 } 78 79 // Warn logs a message at warn level. 80 func Warn(a ...interface{}) { 81 global.helper.Warn(a...) 82 } 83 84 // Warnf logs a message at warnf level. 85 func Warnf(format string, a ...interface{}) { 86 global.helper.Warnf(format, a...) 87 } 88 89 // Warnw logs a message at warnf level. 90 func Warnw(keyvals ...interface{}) { 91 global.helper.Warnw(keyvals...) 92 } 93 94 // Error logs a message at error level. 95 func Error(a ...interface{}) { 96 global.helper.Error(a...) 97 } 98 99 // Errorf logs a message at error level. 100 func Errorf(format string, a ...interface{}) { 101 global.helper.Errorf(format, a...) 102 } 103 104 // Errorw logs a message at error level. 105 func Errorw(keyvals ...interface{}) { 106 global.helper.Errorw(keyvals...) 107 } 108 109 // Fatal logs a message at fatal level. 110 func Fatal(a ...interface{}) { 111 global.helper.Fatal(a...) 112 } 113 114 // Fatalf logs a message at fatal level. 115 func Fatalf(format string, a ...interface{}) { 116 global.helper.Fatalf(format, a...) 117 } 118 119 // Fatalw logs a message at fatal level. 120 func Fatalw(keyvals ...interface{}) { 121 global.helper.Fatalw(keyvals...) 122 }