summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/openstore/main.go10
-rw-r--r--internal/server/middleware.go13
-rw-r--r--internal/server/server.go15
3 files changed, 28 insertions, 10 deletions
diff --git a/cmd/openstore/main.go b/cmd/openstore/main.go
index 90028ff..65d7afb 100644
--- a/cmd/openstore/main.go
+++ b/cmd/openstore/main.go
@@ -1,14 +1,18 @@
package main
import (
- "log"
+ "log/slog"
+ "os"
"codeberg.org/mihna123/openstore/internal/server"
)
func main() {
+ slog.SetDefault(slog.New(slog.NewTextHandler(os.Stdout, nil)))
conf := &server.Config{Name: "OpenStore"}
s := server.New(conf)
- err := s.Serve(":3000")
- log.Fatal(err)
+ if err := s.Serve(":3000"); err != nil {
+ slog.Error("server failed", "err", err)
+ os.Exit(1)
+ }
}
diff --git a/internal/server/middleware.go b/internal/server/middleware.go
index fe51224..c88131c 100644
--- a/internal/server/middleware.go
+++ b/internal/server/middleware.go
@@ -1,8 +1,9 @@
package server
import (
- "log"
+ "log/slog"
"net/http"
+ "time"
)
type statusRecorder struct {
@@ -17,8 +18,16 @@ func (r *statusRecorder) WriteHeader(code int) {
func logRequests(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ start := time.Now()
recorder := &statusRecorder{ResponseWriter: w, status: http.StatusOK}
next.ServeHTTP(recorder, r)
- log.Printf("[%s] %s - %s: %d", r.Method, r.RequestURI, r.RemoteAddr, recorder.status)
+ slog.Info("request",
+ "method", r.Method,
+ "path", r.URL.Path,
+ "status", recorder.status,
+ "duration", time.Since(start),
+ "remote", r.RemoteAddr,
+ "x-forwarded-for", r.Header.Get("x-forwarded-for"),
+ )
})
}
diff --git a/internal/server/server.go b/internal/server/server.go
index 6de45ca..5beca97 100644
--- a/internal/server/server.go
+++ b/internal/server/server.go
@@ -1,7 +1,8 @@
package server
import (
- "log"
+ "log/slog"
+ "net"
"time"
"html/template"
@@ -25,7 +26,7 @@ func (s *Server) routes() {
err := s.tmpl.ExecuteTemplate(w, "index.html", nil)
if err != nil {
- log.Printf("Error with template: %s", err.Error())
+ slog.Error("render template", "err", err.Error())
return
}
})
@@ -33,14 +34,18 @@ func (s *Server) routes() {
func (s *Server) Serve(addr string) error {
httpSrv := &http.Server{
- Addr: addr,
Handler: logRequests(s.mux),
ReadHeaderTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
}
- log.Printf("Server \"%s\" listening at %s", s.config.Name, addr)
- return httpSrv.ListenAndServe()
+ ln, err := net.Listen("tcp", addr)
+ if err != nil {
+ return err
+ }
+
+ slog.Info("listening", "name", s.config.Name, "addr", addr)
+ return httpSrv.Serve(ln)
}
func New(c *Config) *Server {