From fb2aed51c42f6f4e1d722871c7fae7376c9df235 Mon Sep 17 00:00:00 2001 From: balmani Date: Tue, 20 Aug 2024 11:00:05 +0530 Subject: [PATCH 1/2] lumberjack logging option --- go.mod | 1 + go.sum | 2 ++ main.go | 24 +++++++++++++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index b8bf0996..712796ae 100644 --- a/go.mod +++ b/go.mod @@ -23,6 +23,7 @@ require ( go.temporal.io/server v1.23.0 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 google.golang.org/protobuf v1.34.2 + gopkg.in/natefinch/lumberjack.v2 v2.2.1 gopkg.in/yaml.v3 v3.0.1 istio.io/api v1.22.3-0.20240703105953-437a88321a16 istio.io/client-go v1.22.3 diff --git a/go.sum b/go.sum index 3fc552fd..2a7e629e 100644 --- a/go.sum +++ b/go.sum @@ -507,6 +507,8 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/validator.v2 v2.0.0-20200605151824-2b28d334fa05/go.mod h1:o4V0GXN9/CAmCsvJ0oXYZvrZOe7syiDZSN1GWGZTGzc= gopkg.in/validator.v2 v2.0.1 h1:xF0KWyGWXm/LM2G1TrEjqOu4pa6coO9AlWSf3msVfDY= gopkg.in/validator.v2 v2.0.1/go.mod h1:lIUZBlB3Im4s/eYp39Ry/wkR02yOPhZ9IwIRBjuPuG8= diff --git a/main.go b/main.go index 4f2b596d..7aa8e339 100644 --- a/main.go +++ b/main.go @@ -19,7 +19,10 @@ package main import ( "flag" + "gopkg.in/natefinch/lumberjack.v2" + "io" "os" + "strconv" // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.) // to ensure that exec-entrypoint and run can make use of them. @@ -66,21 +69,27 @@ func main() { metricsAddr string enableLeaderElection bool probeAddr string + enableLumberjack bool ) flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080", "The address the metric endpoint binds to.") flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.") flag.BoolVar(&enableLeaderElection, "leader-elect", false, "Enable leader election for controller manager. Enabling this will ensure there is only one active controller manager.") + flag.BoolVar(&enableLumberjack, "lumberjack", false, + "Enable lumberjack logging to log to /logs/temporal-operator.log.") + flag.Parse() opts := zap.Options{ Development: true, + DestWriter: logWriter(enableLumberjack), } opts.BindFlags(flag.CommandLine) - flag.Parse() ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts))) + setupLog.Info("Lumberjack Logging Enabled ? " + strconv.FormatBool(enableLumberjack)) + mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ Scheme: scheme, Metrics: metricsserver.Options{ @@ -162,3 +171,16 @@ func main() { os.Exit(1) } } + +func logWriter(enableLumberjack bool) io.Writer { + if enableLumberjack { + return io.MultiWriter(os.Stdout, &lumberjack.Logger{ + Filename: "/logs/temporal-operator.log", + MaxSize: 2, // megabytes + MaxBackups: 100, + MaxAge: 30, // days + Compress: true, // compress rotated log files + }) + } + return os.Stdout +} From dcbb786c618c6bfa03575b9092e3109b27bcc1eb Mon Sep 17 00:00:00 2001 From: balmani Date: Wed, 21 Aug 2024 09:21:58 +0530 Subject: [PATCH 2/2] Accept outputfile as input argument --- main.go | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/main.go b/main.go index 7aa8e339..4f253a1f 100644 --- a/main.go +++ b/main.go @@ -22,8 +22,6 @@ import ( "gopkg.in/natefinch/lumberjack.v2" "io" "os" - "strconv" - // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.) // to ensure that exec-entrypoint and run can make use of them. _ "k8s.io/client-go/plugin/pkg/client/auth" @@ -69,26 +67,26 @@ func main() { metricsAddr string enableLeaderElection bool probeAddr string - enableLumberjack bool + logOutputFile string ) flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080", "The address the metric endpoint binds to.") flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.") flag.BoolVar(&enableLeaderElection, "leader-elect", false, "Enable leader election for controller manager. Enabling this will ensure there is only one active controller manager.") - flag.BoolVar(&enableLumberjack, "lumberjack", false, - "Enable lumberjack logging to log to /logs/temporal-operator.log.") + flag.StringVar(&logOutputFile, "logOutputFile", "", + "Log to output file using go lumberjack in addition to stdout.") flag.Parse() opts := zap.Options{ Development: true, - DestWriter: logWriter(enableLumberjack), + DestWriter: logWriter(logOutputFile), } opts.BindFlags(flag.CommandLine) ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts))) - setupLog.Info("Lumberjack Logging Enabled ? " + strconv.FormatBool(enableLumberjack)) + setupLog.Info("logOutputFile " + logOutputFile) mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ Scheme: scheme, @@ -172,10 +170,10 @@ func main() { } } -func logWriter(enableLumberjack bool) io.Writer { - if enableLumberjack { +func logWriter(outputFile string) io.Writer { + if len(outputFile) > 0 { return io.MultiWriter(os.Stdout, &lumberjack.Logger{ - Filename: "/logs/temporal-operator.log", + Filename: outputFile, MaxSize: 2, // megabytes MaxBackups: 100, MaxAge: 30, // days