diff --git a/server/config/server/deployment.yaml b/server/config/server/deployment.yaml index f5a626b5..e3bdaa48 100644 --- a/server/config/server/deployment.yaml +++ b/server/config/server/deployment.yaml @@ -42,6 +42,11 @@ spec: configMapKeyRef: name: rest-api-server-config key: kubesaw.namespace + - name: LOG_LEVEL + valueFrom: + configMapKeyRef: + name: rest-api-server-config + key: log.level - name: WORKSPACES_NAMESPACE valueFrom: fieldRef: diff --git a/server/hack/deploy.sh b/server/hack/deploy.sh index 02674d7b..ff3fb1c4 100755 --- a/server/hack/deploy.sh +++ b/server/hack/deploy.sh @@ -8,6 +8,7 @@ ROOT_DIR="$(realpath "${DIR}"/../..)" KUBECLI=${KUBECLI:-kubectl} KUSTOMIZE=${KUSTOMIZE:-kustomize} YQ=${YQ:-yq} +SERVER_LOG_LEVEL=${SERVER_LOG_LEVEL:-0} # retrieve toolchain-host namespace # @@ -52,6 +53,7 @@ ${KUSTOMIZE} edit set namespace "$1" ${KUSTOMIZE} edit set image workspaces/rest-api="$2" ${KUSTOMIZE} edit add configmap rest-api-server-config \ --behavior=replace \ + --from-literal=log.level="${SERVER_LOG_LEVEL}" \ --from-literal=kubesaw.namespace="${toolchain_host}" # apply config diff --git a/server/main.go b/server/main.go index 3d690150..9bd92389 100644 --- a/server/main.go +++ b/server/main.go @@ -5,6 +5,7 @@ import ( "fmt" "log/slog" "os" + "strconv" "time" "github.com/go-logr/logr" @@ -16,18 +17,17 @@ import ( ) const DefaultAddr string = ":8080" +const EnvLogLevel = "LOG_LEVEL" func main() { - l := slog.Default() - - if err := run(); err != nil { + l := constructLog() + if err := run(l); err != nil { l.Error("error configuring and running the server", "error", err) os.Exit(1) } } -func run() error { - l := slog.Default() +func run(l *slog.Logger) error { log.SetLogger(logr.FromSlogHandler(l.Handler())) // fetch configuration @@ -110,3 +110,23 @@ func run() error { return nil } + +// constructLog constructs a new instance of the logger +func constructLog() *slog.Logger { + logLevel := getLogLevel() + + handler := slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{ + Level: logLevel, + }) + return slog.New(handler) +} + +// getLogLevel fetches the log level from the appropriate environment variable +func getLogLevel() slog.Level { + env := os.Getenv(EnvLogLevel) + level, err := strconv.Atoi(env) + if err != nil { + return slog.LevelError + } + return slog.Level(level) +}