From 296015faffa2d2cf5fc8506e18ae83de4652ec21 Mon Sep 17 00:00:00 2001 From: Alex Wong Date: Tue, 5 Mar 2019 12:15:27 +0800 Subject: [PATCH 1/3] update .gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 From 104e8ef0500d96137ba922c189ade76f393d08ce Mon Sep 17 00:00:00 2001 From: Alex Wong Date: Tue, 5 Mar 2019 14:30:23 +0800 Subject: [PATCH 2/3] Add options for customizing threadiness, logger encoding, and global logger level --- cmd/flagger/main.go | 5 ++++- pkg/logging/logger.go | 20 +++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/cmd/flagger/main.go b/cmd/flagger/main.go index 7b7dd2e3..2fd09069 100644 --- a/cmd/flagger/main.go +++ b/cmd/flagger/main.go @@ -31,6 +31,7 @@ var ( slackURL string slackUser string slackChannel string + threadiness int ) func init() { @@ -43,6 +44,7 @@ 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.") } func main() { @@ -52,6 +54,7 @@ func main() { if err != nil { log.Fatalf("Error creating logger: %v", err) } + logging.ReplaceGlobalIf(logger.Desugar()) defer logger.Sync() stopCh := signals.SetupSignalHandler() @@ -132,7 +135,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/pkg/logging/logger.go b/pkg/logging/logger.go index 279fbd7a..14465520 100644 --- a/pkg/logging/logger.go +++ b/pkg/logging/logger.go @@ -1,6 +1,7 @@ package logging import ( + "flag" "fmt" "os" @@ -8,6 +9,17 @@ import ( "go.uber.org/zap/zapcore" ) +var ( + replaceGlobals bool + encoding string +) + +func init() { + flag.BoolVar(&replaceGlobals, "zap-replace-globals", false, "Whether to change level of global zap logger.") + flag.StringVar(&encoding, "zap-encoding", "json", "Zap logger encoding.") + +} + // NewLogger returns a zap sugared logger configured with json format and caller id func NewLogger(logLevel string) (*zap.SugaredLogger, error) { level := zap.NewAtomicLevelAt(zapcore.InfoLevel) @@ -47,7 +59,7 @@ func NewLogger(logLevel string) (*zap.SugaredLogger, error) { Initial: 100, Thereafter: 100, }, - Encoding: "json", + Encoding: encoding, EncoderConfig: zapEncoderConfig, OutputPaths: []string{"stderr"}, ErrorOutputPaths: []string{"stderr"}, @@ -60,6 +72,12 @@ func NewLogger(logLevel string) (*zap.SugaredLogger, error) { return logger.Sugar(), nil } +func ReplaceGlobalIf(logger *zap.Logger) { + if replaceGlobals { + zap.ReplaceGlobals(logger) + } +} + // Console writes to stdout if the console env var exists func Console(a ...interface{}) (n int, err error) { if os.Getenv("console") != "" { From 231a32331bee57705627520a6f11188b658b53cd Mon Sep 17 00:00:00 2001 From: Alex Wong Date: Tue, 5 Mar 2019 17:48:55 +0800 Subject: [PATCH 3/3] move flags to main packages --- cmd/flagger/main.go | 12 ++++++++++-- cmd/loadtester/main.go | 19 ++++++++++++++----- pkg/logging/logger.go | 25 ++++++------------------- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/cmd/flagger/main.go b/cmd/flagger/main.go index 2fd09069..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" @@ -32,6 +33,8 @@ var ( slackUser string slackChannel string threadiness int + zapReplaceGlobals bool + zapEncoding string ) func init() { @@ -45,16 +48,21 @@ func init() { 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) } - logging.ReplaceGlobalIf(logger.Desugar()) + if zapReplaceGlobals { + zap.ReplaceGlobals(logger.Desugar()) + } + defer logger.Sync() stopCh := signals.SetupSignalHandler() 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 14465520..8c1838e5 100644 --- a/pkg/logging/logger.go +++ b/pkg/logging/logger.go @@ -1,7 +1,6 @@ package logging import ( - "flag" "fmt" "os" @@ -9,19 +8,13 @@ import ( "go.uber.org/zap/zapcore" ) -var ( - replaceGlobals bool - encoding string -) - -func init() { - flag.BoolVar(&replaceGlobals, "zap-replace-globals", false, "Whether to change level of global zap logger.") - flag.StringVar(&encoding, "zap-encoding", "json", "Zap logger encoding.") - -} - // 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": @@ -59,7 +52,7 @@ func NewLogger(logLevel string) (*zap.SugaredLogger, error) { Initial: 100, Thereafter: 100, }, - Encoding: encoding, + Encoding: zapEncoding, EncoderConfig: zapEncoderConfig, OutputPaths: []string{"stderr"}, ErrorOutputPaths: []string{"stderr"}, @@ -72,12 +65,6 @@ func NewLogger(logLevel string) (*zap.SugaredLogger, error) { return logger.Sugar(), nil } -func ReplaceGlobalIf(logger *zap.Logger) { - if replaceGlobals { - zap.ReplaceGlobals(logger) - } -} - // Console writes to stdout if the console env var exists func Console(a ...interface{}) (n int, err error) { if os.Getenv("console") != "" {