From 14950293c5955fe476cc16c8315b0bbd5e9d31e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20S=C4=99k?= Date: Mon, 5 Nov 2018 16:07:57 +0100 Subject: [PATCH] Improve logging --- cmd/manager/main.go | 55 +++++++++++++++++++++++++++++++-------------- pkg/log/log.go | 33 +++++++++++++++++++++++++++ version/version.go | 5 ++--- 3 files changed, 73 insertions(+), 20 deletions(-) create mode 100644 pkg/log/log.go diff --git a/cmd/manager/main.go b/cmd/manager/main.go index 526164c1..5ddb2353 100644 --- a/cmd/manager/main.go +++ b/cmd/manager/main.go @@ -2,12 +2,17 @@ package main import ( "flag" - "log" + "fmt" + "os" "runtime" "github.com/VirtusLab/jenkins-operator/pkg/apis" "github.com/VirtusLab/jenkins-operator/pkg/controller" - k8sutil "github.com/operator-framework/operator-sdk/pkg/util/k8sutil" + "github.com/VirtusLab/jenkins-operator/pkg/log" + "github.com/VirtusLab/jenkins-operator/version" + + "github.com/operator-framework/operator-sdk/pkg/sdk" + "github.com/operator-framework/operator-sdk/pkg/k8sutil" sdkVersion "github.com/operator-framework/operator-sdk/version" _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" "sigs.k8s.io/controller-runtime/pkg/client/config" @@ -15,50 +20,66 @@ import ( "sigs.k8s.io/controller-runtime/pkg/runtime/signals" ) -func printVersion() { - log.Printf("Go Version: %s", runtime.Version()) - log.Printf("Go OS/Arch: %s/%s", runtime.GOOS, runtime.GOARCH) - log.Printf("operator-sdk Version: %v", sdkVersion.Version) +func printInfo(namespace string) { + log.Log.Info(fmt.Sprintf("Version: %s", version.Version)) + log.Log.Info(fmt.Sprintf("Git commit: %s", version.GitCommit)) + log.Log.Info(fmt.Sprintf("Go Version: %s", runtime.Version())) + log.Log.Info(fmt.Sprintf("Go OS/Arch: %s/%s", runtime.GOOS, runtime.GOARCH)) + log.Log.Info(fmt.Sprintf("operator-sdk Version: %v", sdkVersion.Version)) + log.Log.Info(fmt.Sprintf("watch namespace: %v", namespace)) } func main() { - printVersion() + debug := flag.Bool("debug", false, "Set log level to debug") flag.Parse() + if err := log.SetupLogger(debug); err != nil { + log.Log.Error(err, "unable to construct the logger") + os.Exit(-1) + } + namespace, err := k8sutil.GetWatchNamespace() if err != nil { - log.Fatalf("failed to get watch namespace: %v", err) + log.Log.Error(err, "failed to get watch namespace") + os.Exit(-1) } + printInfo(namespace) - // TODO: Expose metrics port after SDK uses controller-runtime's dynamic client - // sdk.ExposeMetricsPort() + sdk.ExposeMetricsPort() // Get a config to talk to the apiserver cfg, err := config.GetConfig() if err != nil { - log.Fatal(err) + log.Log.Error(err, "failed to get config") + os.Exit(-1) } // Create a new Cmd to provide shared dependencies and start components mgr, err := manager.New(cfg, manager.Options{Namespace: namespace}) if err != nil { - log.Fatal(err) + log.Log.Error(err, "failed to create manager") + os.Exit(-1) } - log.Print("Registering Components.") + log.Log.Info("Registering Components.") // Setup Scheme for all resources if err := apis.AddToScheme(mgr.GetScheme()); err != nil { - log.Fatal(err) + log.Log.Error(err, "failed to setup scheme") + os.Exit(-1) } // Setup all Controllers if err := controller.AddToManager(mgr); err != nil { - log.Fatal(err) + log.Log.Error(err, "failed to setup controllers") + os.Exit(-1) } - log.Print("Starting the Cmd.") + log.Log.Info("Starting the Cmd.") // Start the Cmd - log.Fatal(mgr.Start(signals.SetupSignalHandler())) + if err := mgr.Start(signals.SetupSignalHandler()); err != nil { + log.Log.Error(err, "failed to start cmd") + os.Exit(-1) + } } diff --git a/pkg/log/log.go b/pkg/log/log.go new file mode 100644 index 00000000..a57b2eb4 --- /dev/null +++ b/pkg/log/log.go @@ -0,0 +1,33 @@ +// TODO delete after resolve issue https://github.com/operator-framework/operator-sdk/issues/503 +package log + +import ( + "github.com/go-logr/logr" + "github.com/go-logr/zapr" + "go.uber.org/zap" +) + +var Log logr.Logger + +// ZapLogger is a Logger implementation. +// If development is true, a Zap development config will be used +// (stacktraces on warnings, no sampling), otherwise a Zap production +// config will be used (stacktraces on errors, sampling). +func SetupLogger(development *bool) error { + var zapLog *zap.Logger + var err error + + if *development { + zapLogCfg := zap.NewDevelopmentConfig() + zapLog, err = zapLogCfg.Build(zap.AddCallerSkip(1)) + } else { + zapLogCfg := zap.NewProductionConfig() + zapLog, err = zapLogCfg.Build(zap.AddCallerSkip(1)) + } + if err != nil { + return err + } + + Log = zapr.NewLogger(zapLog) + return nil +} diff --git a/version/version.go b/version/version.go index e3e130bf..078ccf3a 100644 --- a/version/version.go +++ b/version/version.go @@ -1,5 +1,4 @@ package version -var ( - Version = "0.0.1" -) +var Version string +var GitCommit string