feat: logging different levels with slog

This commit is contained in:
2026-05-06 01:45:38 +02:00
parent 0a88292f0a
commit 6eccd97d52
+14 -6
View File
@@ -2,7 +2,7 @@ package main
import ( import (
"crypto/subtle" "crypto/subtle"
"log" "log/slog"
"net/http" "net/http"
"net/http/httputil" "net/http/httputil"
"net/url" "net/url"
@@ -11,6 +11,9 @@ import (
) )
func main() { func main() {
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
slog.SetDefault(logger)
target := mustEnv("PZ8_RELAY_TARGET_URL") target := mustEnv("PZ8_RELAY_TARGET_URL")
username := mustEnv("PZ8_RELAY_USERNAME") username := mustEnv("PZ8_RELAY_USERNAME")
password := mustEnv("PZ8_RELAY_PASSWORD") password := mustEnv("PZ8_RELAY_PASSWORD")
@@ -22,7 +25,8 @@ func main() {
targetURL, err := url.Parse(target) targetURL, err := url.Parse(target)
if err != nil { 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{ proxy := &httputil.ReverseProxy{
@@ -35,7 +39,7 @@ func main() {
u, p, ok := r.BasicAuth() u, p, ok := r.BasicAuth()
if !ok || subtle.ConstantTimeCompare([]byte(u), []byte(username)) != 1 || if !ok || subtle.ConstantTimeCompare([]byte(u), []byte(username)) != 1 ||
subtle.ConstantTimeCompare([]byte(p), []byte(password)) != 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"`) w.Header().Set("WWW-Authenticate", `Basic realm="pz8-relay"`)
http.Error(w, "unauthorized", http.StatusUnauthorized) http.Error(w, "unauthorized", http.StatusUnauthorized)
return return
@@ -43,8 +47,11 @@ func main() {
proxy.ServeHTTP(w, r) proxy.ServeHTTP(w, r)
}) })
log.Printf("pz8-relay listening on %s, proxying to %s", addr, targetURL.Redacted()) slog.Info("pz8-relay listening", "addr", addr, "target", targetURL.Redacted())
log.Fatal(http.ListenAndServe(addr, nil)) 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 // 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 { func mustEnv(key string) string {
v := os.Getenv(key) v := os.Getenv(key)
if v == "" { if v == "" {
log.Fatalf("missing required env var: %s", key) slog.Error("missing required env var", "name", key)
os.Exit(1)
} }
return v return v
} }