From 91de5d27f02d7015aed3ad8c45fe064883630eba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Stru=C3=9F?= <31846129+applike-ss@users.noreply.github.com> Date: Thu, 5 Dec 2024 15:00:08 +0100 Subject: [PATCH] Added json format logging (#184) --- CHANGELOG.md | 2 ++ cmd/rollout-operator/main.go | 19 +++++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d3e745b4..54afb43ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## main / unreleased +* [ENHANCEMENT] New parameter log.format allows to set logging format to logfmt (default) or json (new). #184 + ## v0.21.0 * [ENHANCEMENT] Log debug information about StatefulSets as they are created, updated and deleted. #182 diff --git a/cmd/rollout-operator/main.go b/cmd/rollout-operator/main.go index 913e12485..0d1d6d1a1 100644 --- a/cmd/rollout-operator/main.go +++ b/cmd/rollout-operator/main.go @@ -39,7 +39,8 @@ import ( const defaultServerSelfSignedCertExpiration = model.Duration(365 * 24 * time.Hour) type config struct { - logLevel string + logFormat string + logLevel string serverPort int kubeAPIURL string @@ -65,6 +66,7 @@ type config struct { } func (cfg *config) register(fs *flag.FlagSet) { + fs.StringVar(&cfg.logFormat, "log.format", "logfmt", "The log format. Supported values: logfmt, json. Defaults to logfmt.") fs.StringVar(&cfg.logLevel, "log.level", "debug", "The log level. Supported values: debug, info, warn, error.") fs.IntVar(&cfg.serverPort, "server.port", 8001, "Port to use for exposing instrumentation and readiness probe endpoints.") fs.StringVar(&cfg.kubeAPIURL, "kubernetes.api-url", "", "The Kubernetes server API URL. If not specified, it will be auto-detected when running within a Kubernetes cluster.") @@ -113,7 +115,7 @@ func main() { check(fs.Parse(os.Args[1:])) check(cfg.validate()) - logger, err := initLogger(cfg.logLevel) + logger, err := initLogger(cfg.logFormat, cfg.logLevel) check(err) reg := prometheus.NewRegistry() @@ -280,8 +282,17 @@ func buildKubeConfig(apiURL, cfgFile string) (*rest.Config, error) { return rest.InClusterConfig() } -func initLogger(minLevel string) (log.Logger, error) { - logger := log.NewLogfmtLogger(log.NewSyncWriter(os.Stderr)) +func initLogger(logFormat, minLevel string) (log.Logger, error) { + var logger log.Logger + switch logFormat { + case "logfmt": + logger = log.NewLogfmtLogger(log.NewSyncWriter(os.Stderr)) + case "json": + logger = log.NewJSONLogger(log.NewSyncWriter(os.Stderr)) + default: + return nil, fmt.Errorf("unknown log format: %s", logFormat) + } + var options []level.Option switch minLevel {