From 6eccd97d524143c1d20e7f251bbf28fbdf9d3fe0 Mon Sep 17 00:00:00 2001 From: Domenico Testa Date: Wed, 6 May 2026 01:45:38 +0200 Subject: [PATCH] feat: logging different levels with slog --- main.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/main.go b/main.go index 6f765dc..0d92437 100644 --- a/main.go +++ b/main.go @@ -2,7 +2,7 @@ package main import ( "crypto/subtle" - "log" + "log/slog" "net/http" "net/http/httputil" "net/url" @@ -11,6 +11,9 @@ import ( ) func main() { + logger := slog.New(slog.NewJSONHandler(os.Stdout, nil)) + slog.SetDefault(logger) + target := mustEnv("PZ8_RELAY_TARGET_URL") username := mustEnv("PZ8_RELAY_USERNAME") password := mustEnv("PZ8_RELAY_PASSWORD") @@ -22,7 +25,8 @@ func main() { targetURL, err := url.Parse(target) if err != nil { - log.Fatalf("invalid PZ8_RELAY_TARGET_URL: %v", err) + slog.Error("invalid PZ8_RELAY_TARGET_URL", "err", err) + os.Exit(1) } proxy := &httputil.ReverseProxy{ @@ -35,7 +39,7 @@ func main() { u, p, ok := r.BasicAuth() if !ok || subtle.ConstantTimeCompare([]byte(u), []byte(username)) != 1 || subtle.ConstantTimeCompare([]byte(p), []byte(password)) != 1 { - log.Printf("unauthorized request from %s", clientIP(r)) + slog.Warn("unauthorized request", "client", clientIP(r)) w.Header().Set("WWW-Authenticate", `Basic realm="pz8-relay"`) http.Error(w, "unauthorized", http.StatusUnauthorized) return @@ -43,8 +47,11 @@ func main() { proxy.ServeHTTP(w, r) }) - log.Printf("pz8-relay listening on %s, proxying to %s", addr, targetURL.Redacted()) - log.Fatal(http.ListenAndServe(addr, nil)) + slog.Info("pz8-relay listening", "addr", addr, "target", targetURL.Redacted()) + if err := http.ListenAndServe(addr, nil); err != nil { + slog.Error("server stopped", "err", err) + os.Exit(1) + } } // clientIP returns the original client address, trusting X-Forwarded-For @@ -62,7 +69,8 @@ func clientIP(r *http.Request) string { func mustEnv(key string) string { v := os.Getenv(key) if v == "" { - log.Fatalf("missing required env var: %s", key) + slog.Error("missing required env var", "name", key) + os.Exit(1) } return v }