aboutsummaryrefslogtreecommitdiff
path: root/internal/slog.go
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2023-09-09 21:58:21 -0400
committerXe Iaso <me@xeiaso.net>2023-09-09 21:58:21 -0400
commit3c34d8854163880097bc6b326a6c79db7b5b3b73 (patch)
tree906815e897b704157f3757f7417ec0fe206a5c8d /internal/slog.go
parent543c4bee328a38eddc5ba5489bec49c3b2f6fb59 (diff)
downloadxesite-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.go58
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)
+ }
+ })
+}