github.com/ddev/ddev@v1.23.2-0.20240519125000-d824ffe36ff3/pkg/amplitude/loggers/ddev_logger.go (about)

     1  package loggers
     2  
     3  import (
     4  	"fmt"
     5  	"regexp"
     6  
     7  	"github.com/amplitude/analytics-go/amplitude/types"
     8  	"github.com/ddev/ddev/pkg/output"
     9  	"github.com/ddev/ddev/pkg/util"
    10  )
    11  
    12  func NewDdevLogger(debug, verbose bool) types.Logger {
    13  	return &ddevLogger{
    14  		debug:   debug,
    15  		verbose: verbose,
    16  	}
    17  }
    18  
    19  type ddevLogger struct {
    20  	debug   bool
    21  	verbose bool
    22  }
    23  
    24  func (l *ddevLogger) Debugf(message string, args ...interface{}) {
    25  	if l.verbose {
    26  		output.UserErr.Print(filterMessage(message, args...))
    27  	}
    28  }
    29  
    30  func (l *ddevLogger) Infof(message string, args ...interface{}) {
    31  	if l.verbose || l.debug {
    32  		output.UserErr.Info(filterMessage(util.ColorizeText(message, "green"), args...))
    33  	}
    34  }
    35  
    36  func (l *ddevLogger) Warnf(message string, args ...interface{}) {
    37  	if l.verbose || l.debug {
    38  		output.UserErr.Warn(filterMessage(util.ColorizeText(message, "yellow"), args...))
    39  	}
    40  }
    41  
    42  func (l *ddevLogger) Errorf(message string, args ...interface{}) {
    43  	if l.verbose || l.debug {
    44  		output.UserErr.Error(filterMessage(util.ColorizeText(message, "red"), args...))
    45  	}
    46  }
    47  
    48  // filterMessage removes sensitive data from the message like the API key.
    49  func filterMessage(message string, args ...interface{}) string {
    50  	re := regexp.MustCompile(`(?m)"api_key"\s*:\s*"[^"]*"`)
    51  	message = re.ReplaceAllString(fmt.Sprintf(message, args...), `"api_key":"***"`)
    52  
    53  	return fmt.Sprintf("AMPLITUDE: %s", message)
    54  }