fork of whitequark.org/git-pages with mods for tangled

Add a log level config option

Changed files
+32 -2
conf
src
+1
conf/config.example.toml
··· 2 2 # as the intrinsic default value. 3 3 4 4 log-format = "text" 5 + log-level = "info" 5 6 6 7 [server] 7 8 # Use "-" to disable the handler.
+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
··· 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() {