From 351d0a0c85a946d5a453b36ffbc5fe8a64f52a5f Mon Sep 17 00:00:00 2001 From: David Leadbeater Date: Thu, 20 Nov 2025 17:29:09 +1100 Subject: [PATCH] Add a log level config option --- conf/config.example.toml | 1 + src/config.go | 1 + src/observe.go | 32 ++++++++++++++++++++++++++++++-- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/conf/config.example.toml b/conf/config.example.toml index 98f2fd2..135fa2a 100644 --- a/conf/config.example.toml +++ b/conf/config.example.toml @@ -2,6 +2,7 @@ # as the intrinsic default value. log-format = "text" +log-level = "info" [server] # Use "-" to disable the handler. diff --git a/src/config.go b/src/config.go index 1386eb4..0a7b9f9 100644 --- a/src/config.go +++ b/src/config.go @@ -38,6 +38,7 @@ type Config struct { Insecure bool `toml:"-" env:"insecure"` Features []string `toml:"features"` LogFormat string `toml:"log-format" default:"text"` + LogLevel string `toml:"log-level" default:"info"` Server ServerConfig `toml:"server"` Wildcard []WildcardConfig `toml:"wildcard"` Storage StorageConfig `toml:"storage"` diff --git a/src/observe.go b/src/observe.go index 222b8a1..1ca1cee 100644 --- a/src/observe.go +++ b/src/observe.go @@ -12,6 +12,7 @@ import ( "os" "runtime/debug" "strconv" + "strings" "time" slogmulti "github.com/samber/slog-multi" @@ -55,15 +56,29 @@ func InitObservability() { logHandlers := []slog.Handler{} + logLevel := slog.LevelInfo + switch strings.ToLower(config.LogLevel) { + case "debug": + logLevel = slog.LevelDebug + case "info": + logLevel = slog.LevelInfo + case "warn": + logLevel = slog.LevelWarn + case "error": + logLevel = slog.LevelError + default: + log.Println("unknown log level", config.LogLevel) + } + switch config.LogFormat { case "none": // nothing to do case "text": logHandlers = append(logHandlers, - slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{})) + slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: logLevel})) case "json": logHandlers = append(logHandlers, - slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{})) + slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{Level: logLevel})) default: log.Println("unknown log format", config.LogFormat) } @@ -118,6 +133,7 @@ func InitObservability() { if enableLogs { logHandlers = append(logHandlers, sentryslog.Option{ AddSource: true, + LogLevel: levelsFromMinimum(logLevel), }.NewSentryHandler(context.Background())) } } @@ -125,6 +141,18 @@ func InitObservability() { slog.SetDefault(slog.New(slogmulti.Fanout(logHandlers...))) } +// From sentryslog, because for some reason they don't make it public. +func levelsFromMinimum(minLevel slog.Level) []slog.Level { + allLevels := []slog.Level{slog.LevelDebug, slog.LevelInfo, slog.LevelWarn, slog.LevelError, sentryslog.LevelFatal} + var result []slog.Level + for _, level := range allLevels { + if level >= minLevel { + result = append(result, level) + } + } + return result +} + func FiniObservability() { if hasSentry() { sentry.Flush(2 * time.Second)