From 390774600f13accb5d0323f5a773f97cdca23742 Mon Sep 17 00:00:00 2001 From: "Gustavo L de Mello (Guz)" Date: Tue, 22 Oct 2024 11:55:00 -0300 Subject: [PATCH] fix(logger,middlewares): status code not being read from response --- app/app.go | 5 ++++- assets/assets.go | 11 +++++++++++ router/middleware/dev.go | 35 +++++++++++++++-------------------- 3 files changed, 30 insertions(+), 21 deletions(-) create mode 100644 assets/assets.go diff --git a/app/app.go b/app/app.go index 4c51e22..6bf67aa 100644 --- a/app/app.go +++ b/app/app.go @@ -10,6 +10,7 @@ import ( "os/signal" "syscall" + "forge.capytal.company/capytalcode/project-comicverse/configs" "forge.capytal.company/capytalcode/project-comicverse/handlers/pages" devPages "forge.capytal.company/capytalcode/project-comicverse/handlers/pages/dev" "forge.capytal.company/capytalcode/project-comicverse/router" @@ -56,6 +57,8 @@ func NewApp(opts ...AppOpts) *App { assets: opts[0].Assets, } + configs.DEVELOPMENT = app.dev + app.setLogger() app.setServer() @@ -75,7 +78,7 @@ func (a *App) setServer() { r.Use(mlogger.Wrap) - if a.dev { + if configs.DEVELOPMENT { a.logger.Info("RUNNING IN DEVELOPMENT MODE") r.Use(middleware.DevMiddleware) diff --git a/assets/assets.go b/assets/assets.go new file mode 100644 index 0000000..3ff7629 --- /dev/null +++ b/assets/assets.go @@ -0,0 +1,11 @@ +package assets + +import ( + _ "embed" +) + +//go:embed css/uno.css +var UNO_CSS []byte + +//go:embed css/theme.css +var THEME_CSS []byte diff --git a/router/middleware/dev.go b/router/middleware/dev.go index c3e757e..ac0a814 100644 --- a/router/middleware/dev.go +++ b/router/middleware/dev.go @@ -4,7 +4,6 @@ import ( "log/slog" "math/rand" "net/http" - "strconv" ) func DevMiddleware(next http.Handler) http.Handler { @@ -18,6 +17,16 @@ type LoggerMiddleware struct { log *slog.Logger } +type loggerReponse struct { + http.ResponseWriter + status int +} + +func (lr *loggerReponse) WriteHeader(s int) { + lr.status = s + lr.ResponseWriter.WriteHeader(s) +} + func NewLoggerMiddleware(l *slog.Logger) *LoggerMiddleware { l = l.WithGroup("logger_middleware") return &LoggerMiddleware{l} @@ -34,27 +43,13 @@ func (l *LoggerMiddleware) Wrap(next http.Handler) http.Handler { slog.String("path", r.URL.Path), ) - next.ServeHTTP(w, r) + lw := &loggerReponse{w, http.StatusOK} + next.ServeHTTP(lw, r) - s := w.Header().Get("Status") - if s == "" { - s = strconv.Itoa(http.StatusOK) - } - - sc, err := strconv.Atoi(s) - if err != nil { - l.log.Error("INVALID REQUEST STATUS", - slog.String("id", id), - slog.String("status", s), - slog.String("method", r.Method), - slog.String("path", r.URL.Path), - ) - return - } - if sc >= 400 { + if lw.status >= 400 { l.log.Warn("ERR REQUEST", slog.String("id", id), - slog.String("status", s), + slog.Int("status", lw.status), slog.String("method", r.Method), slog.String("path", r.URL.Path), ) @@ -63,7 +58,7 @@ func (l *LoggerMiddleware) Wrap(next http.Handler) http.Handler { l.log.Info("END REQUEST", slog.String("id", id), - slog.String("status", s), + slog.Int("status", lw.status), slog.String("method", r.Method), slog.String("path", r.URL.Path), )