aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJP Appel <jeanpierre.appel01@gmail.com>2024-10-02 13:59:28 -0400
committerJP Appel <jeanpierre.appel01@gmail.com>2024-10-02 13:59:28 -0400
commite8d9040688925304edad469d92518da84e1b8d96 (patch)
tree4935b83ed50b75790227d99b7660e79f6ea6fa6d
parentbdbf39219bc5c16cdbbbd1d5a227edd87d56b34a (diff)
Refactor loging to use slog
-rw-r--r--api/api.go18
-rw-r--r--nonsense-time.go37
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())
}