diff --git a/router/cmd/plan_generator.go b/router/cmd/plan_generator.go index 04c5c78ba0..cf5e34446f 100644 --- a/router/cmd/plan_generator.go +++ b/router/cmd/plan_generator.go @@ -16,6 +16,7 @@ import ( "github.com/wundergraph/cosmo/router/pkg/plan_generator" "go.uber.org/automaxprocs/maxprocs" "go.uber.org/zap" + "go.uber.org/zap/zapcore" ) func PlanGenerator(args []string) { @@ -34,7 +35,7 @@ func PlanGenerator(args []string) { f.BoolVar(&cfg.OutputReport, "print-report", false, "write a report.json file, with all the query plans and errors sorted by file name") f.BoolVar(&cfg.FailOnPlanError, "fail-on-error", false, "if at least one plan fails, the command exit code will be 1") f.BoolVar(&cfg.FailFast, "fail-fast", false, "stop as soon as possible if a plan fails") - f.StringVar(&cfg.LogLevel, "log-level", "warning", "log level to use (debug, info, warning, error, panic, fatal)") + f.StringVar(&cfg.LogLevel, "log-level", "warning", "log level to use (debug, info, warn, error, panic, fatal)") f.UintVar(&cfg.MaxDataSourceCollectorsConcurrency, "max-collectors", 0, "max number of concurrent data source collectors, if unset or 0, no limit will be enforced") if err := f.Parse(args[1:]); err != nil { @@ -60,7 +61,7 @@ func PlanGenerator(args []string) { ) defer stop() - logLevel, err := logging.ZapLogLevelFromString(cfg.LogLevel) + logLevel, err := zapcore.ParseLevel(cfg.LogLevel) if err != nil { log.Fatalf("Could not parse log level: %s", err) } diff --git a/router/pkg/config/config.schema.json b/router/pkg/config/config.schema.json index d66730574e..f8b66502fc 100644 --- a/router/pkg/config/config.schema.json +++ b/router/pkg/config/config.schema.json @@ -1347,7 +1347,7 @@ }, "log_level": { "type": "string", - "enum": ["debug", "info", "warning", "error", "fatal", "panic"], + "enum": ["debug", "info", "warn", "error", "panic", "fatal"], "description": "The log level. The log level is used to control the verbosity of the logs. The default value is 'info'.", "default": "info" }, diff --git a/router/pkg/config/config_test.go b/router/pkg/config/config_test.go index 0102cb7755..8ff2f5da01 100644 --- a/router/pkg/config/config_test.go +++ b/router/pkg/config/config_test.go @@ -1,11 +1,14 @@ package config import ( - "github.com/goccy/go-yaml" + "fmt" "regexp" "testing" "time" + "github.com/goccy/go-yaml" + "go.uber.org/zap/zapcore" + "github.com/caarlos0/env/v11" "github.com/santhosh-tekuri/jsonschema/v6" "github.com/sebdah/goldie/v2" @@ -201,6 +204,61 @@ telemetry: require.Equal(t, RegExArray{regexp.MustCompile("^instance")}, cfg.Config.Telemetry.Metrics.Prometheus.ExcludeMetricLabels) } +func TestLogLevels(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + logLevel string + expected zapcore.Level + }{ + { + name: "debug level", + logLevel: "debug", + expected: zapcore.DebugLevel, + }, + { + name: "info level", + logLevel: "info", + expected: zapcore.InfoLevel, + }, + { + name: "warn level", + logLevel: "warn", + expected: zapcore.WarnLevel, + }, + { + name: "error level", + logLevel: "error", + expected: zapcore.ErrorLevel, + }, + { + name: "panic level", + logLevel: "panic", + expected: zapcore.PanicLevel, + }, + { + name: "fatal level", + logLevel: "fatal", + expected: zapcore.FatalLevel, + }, + } + + for _, tt := range tests { + t.Run("parses "+tt.name, func(t *testing.T) { + f := createTempFileFromFixture(t, fmt.Sprintf(` +version: "1" +log_level: %s +`, tt.logLevel)) + + cfg, err := LoadConfig([]string{f}) + + require.NoError(t, err) + require.Equal(t, tt.expected, cfg.Config.LogLevel) + }) + } +} + func TestCustomGoDurationExtension(t *testing.T) { t.Parallel() diff --git a/router/pkg/logging/logging.go b/router/pkg/logging/logging.go index fc2ee79429..9f2fc92e66 100644 --- a/router/pkg/logging/logging.go +++ b/router/pkg/logging/logging.go @@ -1,10 +1,8 @@ package logging import ( - "fmt" "math" "os" - "strings" "time" "go.uber.org/zap" @@ -161,25 +159,6 @@ func NewLogFile(path string) (*os.File, error) { return os.OpenFile(path, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644) } -func ZapLogLevelFromString(logLevel string) (zapcore.Level, error) { - switch strings.ToUpper(logLevel) { - case "DEBUG": - return zap.DebugLevel, nil - case "INFO": - return zap.InfoLevel, nil - case "WARNING": - return zap.WarnLevel, nil - case "ERROR": - return zap.ErrorLevel, nil - case "FATAL": - return zap.FatalLevel, nil - case "PANIC": - return zap.PanicLevel, nil - default: - return -1, fmt.Errorf("unknown log level: %s", logLevel) - } -} - func WithRequestID(reqID string) zap.Field { return zap.String(requestIDField, reqID) }