From e8d9040688925304edad469d92518da84e1b8d96 Mon Sep 17 00:00:00 2001 From: JP Appel Date: Wed, 2 Oct 2024 13:59:28 -0400 Subject: Refactor loging to use slog --- api/api.go | 18 ++++++++++-------- nonsense-time.go | 37 +++++++++++++++++++++++-------------- 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/api/api.go b/api/api.go index d735235..3e0dc27 100644 --- a/api/api.go +++ b/api/api.go @@ -3,12 +3,12 @@ package api import ( "context" "encoding/json" - "log" + "log/slog" "net/http" "os" ) -var logger *log.Logger +var Logger *slog.Logger const VTT_URL string = "http://73.188.175.49:30000" @@ -35,6 +35,7 @@ func respondOnline(w http.ResponseWriter, url string, isOnline bool) { jsonData, err := json.Marshal(data) if err != nil { http.Error(w, "Error constructing response", http.StatusInternalServerError) + Logger.Error("Error marshalling site status data") return } @@ -45,8 +46,8 @@ func respondOnline(w http.ResponseWriter, url string, isOnline bool) { func VttOnline(w http.ResponseWriter, req *http.Request) { isOnline := remoteOnline(req.Context(), VTT_URL) - if !isOnline && logger != nil { - logger.Println("Foundry VTT is offline") + if !isOnline { + Logger.DebugContext(req.Context(), "Foundry VTT is offline") } respondOnline(w, VTT_URL, isOnline) } @@ -57,14 +58,15 @@ func VttRedirect(w http.ResponseWriter, req *http.Request) { func SiteOnline(w http.ResponseWriter, req *http.Request) { const URL string = "https://dnd.jpappel.xyz" + isOnline := remoteOnline(req.Context(), URL) - if !isOnline && logger != nil { - logger.Println("Campaign Website is offline") + if !isOnline { + Logger.DebugContext(req.Context(), "Campaign Website is offline") } + respondOnline(w, URL, isOnline) } - func init() { - logger = log.New(os.Stdout, "Api: ", log.Ldate | log.Ltime | log.Lshortfile) + Logger = slog.New(slog.NewTextHandler(os.Stdout, nil)) } diff --git a/nonsense-time.go b/nonsense-time.go index 6c625a1..f9901e6 100644 --- a/nonsense-time.go +++ b/nonsense-time.go @@ -4,16 +4,16 @@ import ( "context" "flag" "fmt" - "log" + "log/slog" "net/http" + "nonsense-time/api" "os" "time" - "nonsense-time/api" ) +var logger *slog.Logger -var logger *log.Logger - +// Middleware to timeout requests after a given duration func timeoutMiddleware(next http.Handler, duration time.Duration) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { ctx, cancel := context.WithTimeout(r.Context(), duration) @@ -28,7 +28,7 @@ func main() { port := flag.Int("p", 8080, "the port to listen on") bindAddr := flag.String("b", "", "the adress to bind to (leave empty for all interfaces)") waitTime := flag.Duration("w", 2*time.Second, "the maximum time for a request, unit defaults to ns") - debug := flag.Bool("v", false, "verbose output") + logLevel := flag.String("l", "info", "log level (debug, info, warn, error)") flag.Usage = func() { fmt.Fprintf(os.Stderr, "Usage: %s [options]\n", os.Args[0]) @@ -39,15 +39,24 @@ func main() { flag.Parse() mux := http.NewServeMux() + loggerOpts := new(slog.HandlerOptions) - addr := fmt.Sprintf("%s:%d", *bindAddr, *port) - loggerFlags := 0 - loggerPrefix := "" - if *debug { - loggerPrefix = "Nonsense Time: " - loggerFlags = log.Ldate | log.Ltime | log.Lshortfile + switch *logLevel { + case "debug": + loggerOpts.Level = slog.LevelDebug + loggerOpts.AddSource = true + case "info": + loggerOpts.Level = slog.LevelInfo + case "warn": + loggerOpts.Level = slog.LevelDebug + case "error": + loggerOpts.Level = slog.LevelError } - logger = log.New(os.Stdout, loggerPrefix, loggerFlags) + + addr := fmt.Sprintf("%s:%d", *bindAddr, *port) + logger = slog.New(slog.NewTextHandler(os.Stdout, loggerOpts)) + + api.Logger = logger vtt := timeoutMiddleware(http.HandlerFunc(api.VttOnline), *waitTime) site := timeoutMiddleware(http.HandlerFunc(api.SiteOnline), *waitTime) @@ -56,6 +65,6 @@ func main() { mux.HandleFunc("GET /vtt", api.VttRedirect) mux.Handle("GET /site/status", site) - logger.Println("Listening on ", addr) - logger.Fatal(http.ListenAndServe(addr, mux)) + logger.Info(fmt.Sprint("Listening on ", addr)) + logger.Info(http.ListenAndServe(addr, mux).Error()) } -- cgit v1.2.3