Browse Source

Merge pull request #1258 from kubecost/mmd/configure-logging-from-pflags

Make logging configurable with pflags
Michael Dresser 3 years ago
parent
commit
1b83096973
1 changed files with 22 additions and 3 deletions
  1. 22 3
      pkg/log/log.go

+ 22 - 3
pkg/log/log.go

@@ -8,6 +8,7 @@ import (
 
 	"github.com/rs/zerolog"
 	"github.com/rs/zerolog/log"
+	"github.com/spf13/pflag"
 	"github.com/spf13/viper"
 )
 
@@ -17,15 +18,33 @@ import (
 // concurrency-safe counter
 var ctr = newCounter()
 
+const (
+	flagFormat       = "log-format"
+	flagLevel        = "log-level"
+	flagDisableColor = "disable-log-color"
+)
+
+// InitLoggingFromFlags maps pflags (e.g. from a cobra command) representing
+// log level, format, and disable color to this logging package's expected
+// format in order to correctly initialize the logger. Passing a nil flag is
+// acceptable and will result in default behavior for that option.
+func InitLoggingFromFlags(level *pflag.Flag, format *pflag.Flag, disableColor *pflag.Flag) {
+	viper.BindPFlag(flagLevel, level)
+	viper.BindPFlag(flagFormat, format)
+	viper.BindPFlag(flagDisableColor, disableColor)
+
+	InitLogging()
+}
+
 func InitLogging() {
 	zerolog.TimeFieldFormat = time.RFC3339Nano
 	// Default to using pretty formatting
-	if strings.ToLower(viper.GetString("log-format")) != "json" {
-		disableColor := viper.GetBool("disable-log-color")
+	if strings.ToLower(viper.GetString(flagFormat)) != "json" {
+		disableColor := viper.GetBool(flagDisableColor)
 		log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: time.RFC3339Nano, NoColor: disableColor})
 	}
 
-	level, err := zerolog.ParseLevel(viper.GetString("log-level"))
+	level, err := zerolog.ParseLevel(viper.GetString(flagLevel))
 	if err != nil {
 		zerolog.SetGlobalLevel(zerolog.InfoLevel)
 		log.Warn().Msg("Error parsing log-level, setting level to 'info'")