diff --git a/.gitignore b/.gitignore index da4a88f8..91339a5e 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,5 @@ .DS_Store bin/ -artifacts/gcloud/ \ No newline at end of file +artifacts/gcloud/ +.idea \ No newline at end of file diff --git a/cmd/flagger/main.go b/cmd/flagger/main.go index 7b7dd2e3..127e67b5 100644 --- a/cmd/flagger/main.go +++ b/cmd/flagger/main.go @@ -2,6 +2,7 @@ package main import ( "flag" + "go.uber.org/zap" "log" "time" @@ -31,6 +32,9 @@ var ( slackURL string slackUser string slackChannel string + threadiness int + zapReplaceGlobals bool + zapEncoding string ) func init() { @@ -43,15 +47,22 @@ func init() { flag.StringVar(&slackURL, "slack-url", "", "Slack hook URL.") flag.StringVar(&slackUser, "slack-user", "flagger", "Slack user name.") flag.StringVar(&slackChannel, "slack-channel", "", "Slack channel.") + flag.IntVar(&threadiness, "threadiness", 2, "Worker concurrency.") + flag.BoolVar(&zapReplaceGlobals, "zap-replace-globals", false, "Whether to change the logging level of the global zap logger.") + flag.StringVar(&zapEncoding, "zap-encoding", "json", "Zap logger encoding.") } func main() { flag.Parse() - logger, err := logging.NewLogger(logLevel) + logger, err := logging.NewLoggerWithEncoding(logLevel, zapEncoding) if err != nil { log.Fatalf("Error creating logger: %v", err) } + if zapReplaceGlobals { + zap.ReplaceGlobals(logger.Desugar()) + } + defer logger.Sync() stopCh := signals.SetupSignalHandler() @@ -132,7 +143,7 @@ func main() { // start controller go func(ctrl *controller.Controller) { - if err := ctrl.Run(2, stopCh); err != nil { + if err := ctrl.Run(threadiness, stopCh); err != nil { logger.Fatalf("Error running controller: %v", err) } }(c) diff --git a/cmd/loadtester/main.go b/cmd/loadtester/main.go index d7ec0feb..9b84d2da 100644 --- a/cmd/loadtester/main.go +++ b/cmd/loadtester/main.go @@ -5,16 +5,19 @@ import ( "github.com/knative/pkg/signals" "github.com/stefanprodan/flagger/pkg/loadtester" "github.com/stefanprodan/flagger/pkg/logging" + "go.uber.org/zap" "log" "time" ) var VERSION = "0.1.0" var ( - logLevel string - port string - timeout time.Duration - logCmdOutput bool + logLevel string + port string + timeout time.Duration + logCmdOutput bool + zapReplaceGlobals bool + zapEncoding string ) func init() { @@ -22,15 +25,21 @@ func init() { flag.StringVar(&port, "port", "9090", "Port to listen on.") flag.DurationVar(&timeout, "timeout", time.Hour, "Command exec timeout.") flag.BoolVar(&logCmdOutput, "log-cmd-output", true, "Log command output to stderr") + flag.BoolVar(&zapReplaceGlobals, "zap-replace-globals", false, "Whether to change the logging level of the global zap logger.") + flag.StringVar(&zapEncoding, "zap-encoding", "json", "Zap logger encoding.") } func main() { flag.Parse() - logger, err := logging.NewLogger(logLevel) + logger, err := logging.NewLoggerWithEncoding(logLevel, zapEncoding) if err != nil { log.Fatalf("Error creating logger: %v", err) } + if zapReplaceGlobals { + zap.ReplaceGlobals(logger.Desugar()) + } + defer logger.Sync() stopCh := signals.SetupSignalHandler() diff --git a/pkg/logging/logger.go b/pkg/logging/logger.go index 279fbd7a..8c1838e5 100644 --- a/pkg/logging/logger.go +++ b/pkg/logging/logger.go @@ -10,6 +10,11 @@ import ( // NewLogger returns a zap sugared logger configured with json format and caller id func NewLogger(logLevel string) (*zap.SugaredLogger, error) { + return NewLoggerWithEncoding(logLevel, "json") +} + +// NewLoggerWithEncoding returns a zap sugared logger configured with provided format, e.g. console or json, and caller id +func NewLoggerWithEncoding(logLevel, zapEncoding string) (*zap.SugaredLogger, error) { level := zap.NewAtomicLevelAt(zapcore.InfoLevel) switch logLevel { case "debug": @@ -47,7 +52,7 @@ func NewLogger(logLevel string) (*zap.SugaredLogger, error) { Initial: 100, Thereafter: 100, }, - Encoding: "json", + Encoding: zapEncoding, EncoderConfig: zapEncoderConfig, OutputPaths: []string{"stderr"}, ErrorOutputPaths: []string{"stderr"},