From b840ed889f464d4be3a1fabe37795c8afe59dfeb Mon Sep 17 00:00:00 2001 From: mihna123 Date: Fri, 21 Aug 2026 21:20:28 +0200 Subject: logs: handle all loggs with slog --- cmd/openstore/main.go | 10 +++++++--- internal/server/middleware.go | 13 +++++++++++-- internal/server/server.go | 15 ++++++++++----- 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 { -- cgit v1.3.1