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  }