+1
conf/config.example.toml
+1
conf/config.example.toml
+1
src/config.go
+1
src/config.go
···
38
38
Insecure bool `toml:"-" env:"insecure"`
39
39
Features []string `toml:"features"`
40
40
LogFormat string `toml:"log-format" default:"text"`
41
+
LogLevel string `toml:"log-level" default:"info"`
41
42
Server ServerConfig `toml:"server"`
42
43
Wildcard []WildcardConfig `toml:"wildcard"`
43
44
Storage StorageConfig `toml:"storage"`
+30
-2
src/observe.go
+30
-2
src/observe.go
···
12
12
"os"
13
13
"runtime/debug"
14
14
"strconv"
15
+
"strings"
15
16
"time"
16
17
17
18
slogmulti "github.com/samber/slog-multi"
···
55
56
56
57
logHandlers := []slog.Handler{}
57
58
59
+
logLevel := slog.LevelInfo
60
+
switch strings.ToLower(config.LogLevel) {
61
+
case "debug":
62
+
logLevel = slog.LevelDebug
63
+
case "info":
64
+
logLevel = slog.LevelInfo
65
+
case "warn":
66
+
logLevel = slog.LevelWarn
67
+
case "error":
68
+
logLevel = slog.LevelError
69
+
default:
70
+
log.Println("unknown log level", config.LogLevel)
71
+
}
72
+
58
73
switch config.LogFormat {
59
74
case "none":
60
75
// nothing to do
61
76
case "text":
62
77
logHandlers = append(logHandlers,
63
-
slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{}))
78
+
slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: logLevel}))
64
79
case "json":
65
80
logHandlers = append(logHandlers,
66
-
slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{}))
81
+
slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{Level: logLevel}))
67
82
default:
68
83
log.Println("unknown log format", config.LogFormat)
69
84
}
···
118
133
if enableLogs {
119
134
logHandlers = append(logHandlers, sentryslog.Option{
120
135
AddSource: true,
136
+
LogLevel: levelsFromMinimum(logLevel),
121
137
}.NewSentryHandler(context.Background()))
122
138
}
123
139
}
124
140
125
141
slog.SetDefault(slog.New(slogmulti.Fanout(logHandlers...)))
142
+
}
143
+
144
+
// From sentryslog, because for some reason they don't make it public.
145
+
func levelsFromMinimum(minLevel slog.Level) []slog.Level {
146
+
allLevels := []slog.Level{slog.LevelDebug, slog.LevelInfo, slog.LevelWarn, slog.LevelError, sentryslog.LevelFatal}
147
+
var result []slog.Level
148
+
for _, level := range allLevels {
149
+
if level >= minLevel {
150
+
result = append(result, level)
151
+
}
152
+
}
153
+
return result
126
154
}
127
155
128
156
func FiniObservability() {