diff options
| author | Xe Iaso <me@xeiaso.net> | 2023-09-09 21:58:21 -0400 |
|---|---|---|
| committer | Xe Iaso <me@xeiaso.net> | 2023-09-09 21:58:21 -0400 |
| commit | 3c34d8854163880097bc6b326a6c79db7b5b3b73 (patch) | |
| tree | 906815e897b704157f3757f7417ec0fe206a5c8d /internal/slog.go | |
| parent | 543c4bee328a38eddc5ba5489bec49c3b2f6fb59 (diff) | |
| download | xesite-3c34d8854163880097bc6b326a6c79db7b5b3b73.tar.xz xesite-3c34d8854163880097bc6b326a6c79db7b5b3b73.zip | |
more work getting it working in Go
Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'internal/slog.go')
| -rw-r--r-- | internal/slog.go | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/internal/slog.go b/internal/slog.go new file mode 100644 index 0000000..f54e19e --- /dev/null +++ b/internal/slog.go @@ -0,0 +1,58 @@ +package internal + +import ( + "flag" + "fmt" + "io" + "log/slog" + "net/http" + "os" +) + +var ( + slogLevel = flag.String("slog-level", "INFO", "log level") + + leveler *slog.LevelVar +) + +func Slog() { + var programLevel slog.Level + if err := (&programLevel).UnmarshalText([]byte(*slogLevel)); err != nil { + fmt.Fprintf(os.Stderr, "invalid log level %s: %v, using info\n", *slogLevel, err) + programLevel = slog.LevelInfo + } + + leveler = &slog.LevelVar{} + leveler.Set(programLevel) + + h := slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{ + AddSource: true, + Level: leveler, + }) + slog.SetDefault(slog.New(h)) + + http.HandleFunc("/.within/debug/slog-level", func(w http.ResponseWriter, r *http.Request) { + var level, old slog.Level + old = leveler.Level() + + if r.Method == http.MethodPost { + data, err := io.ReadAll(http.MaxBytesReader(w, r.Body, 64)) + defer r.Body.Close() + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + if err := (&level).UnmarshalText(data); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + leveler.Set(level) + slog.Info("changed level", "from", old, "to", level) + fmt.Fprintln(w, level) + } else { + fmt.Fprintln(w, old) + } + }) +} |
