logger.go raw

   1  package session
   2  
   3  import (
   4  	"github.com/akamai/AkamaiOPEN-edgegrid-golang/v11/pkg/log"
   5  	"github.com/hashicorp/go-retryablehttp"
   6  )
   7  
   8  // GetRetryableLogger returns wrapper retryablehttp.LeveledLogger for log.Interface
   9  func GetRetryableLogger(log log.Interface) retryablehttp.LeveledLogger {
  10  	return &retryableLogger{log: log}
  11  }
  12  
  13  // retryableLogger is wrapper for log.Interface to expose retryablehttp.LeveledLogger needed for retry logic
  14  type retryableLogger struct {
  15  	log log.Interface
  16  }
  17  
  18  // Error level formatted message.
  19  func (l *retryableLogger) Error(msg string, keysAndValues ...interface{}) {
  20  	kv := append([]interface{}{}, keysAndValues...)
  21  	switch msg {
  22  	case "request failed":
  23  		l.log.Errorf("%s %s request failed: %v", kv[1], kv[3], kv[5])
  24  	case "error reading response body":
  25  		l.log.Errorf("error reading response body: %v", kv[1])
  26  	default:
  27  		l.log.Errorf(msg, keysAndValues...)
  28  	}
  29  }
  30  
  31  // Info level formatted message.
  32  func (l *retryableLogger) Info(msg string, keysAndValues ...interface{}) {
  33  	l.log.Infof(msg, keysAndValues...)
  34  }
  35  
  36  // Debug level formatted message.
  37  func (l *retryableLogger) Debug(msg string, keysAndValues ...interface{}) {
  38  	kv := append([]interface{}{}, keysAndValues...)
  39  	switch msg {
  40  	case "retrying request":
  41  		l.log.Debugf("%s: retrying in %s (%d left)", kv[1], kv[3], kv[5])
  42  	case "performing request":
  43  		l.log.Debugf("%s %s", kv[1], kv[3])
  44  	default:
  45  		l.log.Debugf(msg, keysAndValues...)
  46  	}
  47  }
  48  
  49  // Warn level formatted message.
  50  func (l *retryableLogger) Warn(msg string, keysAndValues ...interface{}) {
  51  	l.log.Warnf(msg, keysAndValues...)
  52  }
  53