tangled
alpha
login
or
join now
oppi.li
/
git-pages
forked from
whitequark.org/git-pages
1
fork
atom
fork of whitequark.org/git-pages with mods for tangled
1
fork
atom
overview
issues
pulls
pipelines
Add a log level config option
David Leadbeater
5 months ago
351d0a0c
982c3321
+32
-2
3 changed files
expand all
collapse all
unified
split
conf
config.example.toml
src
config.go
observe.go
+1
conf/config.example.toml
reviewed
···
2
2
# as the intrinsic default value.
3
3
4
4
log-format = "text"
5
5
+
log-level = "info"
5
6
6
7
[server]
7
8
# Use "-" to disable the handler.
+1
src/config.go
reviewed
···
38
38
Insecure bool `toml:"-" env:"insecure"`
39
39
Features []string `toml:"features"`
40
40
LogFormat string `toml:"log-format" default:"text"`
41
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
reviewed
···
12
12
"os"
13
13
"runtime/debug"
14
14
"strconv"
15
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
59
+
logLevel := slog.LevelInfo
60
60
+
switch strings.ToLower(config.LogLevel) {
61
61
+
case "debug":
62
62
+
logLevel = slog.LevelDebug
63
63
+
case "info":
64
64
+
logLevel = slog.LevelInfo
65
65
+
case "warn":
66
66
+
logLevel = slog.LevelWarn
67
67
+
case "error":
68
68
+
logLevel = slog.LevelError
69
69
+
default:
70
70
+
log.Println("unknown log level", config.LogLevel)
71
71
+
}
72
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
63
-
slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{}))
78
78
+
slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: logLevel}))
64
79
case "json":
65
80
logHandlers = append(logHandlers,
66
66
-
slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{}))
81
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
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
142
+
}
143
143
+
144
144
+
// From sentryslog, because for some reason they don't make it public.
145
145
+
func levelsFromMinimum(minLevel slog.Level) []slog.Level {
146
146
+
allLevels := []slog.Level{slog.LevelDebug, slog.LevelInfo, slog.LevelWarn, slog.LevelError, sentryslog.LevelFatal}
147
147
+
var result []slog.Level
148
148
+
for _, level := range allLevels {
149
149
+
if level >= minLevel {
150
150
+
result = append(result, level)
151
151
+
}
152
152
+
}
153
153
+
return result
126
154
}
127
155
128
156
func FiniObservability() {