2025-05-17 11:36:26 -04:00

43 lines
929 B
Go

package api
import (
"net/http"
"producer/internal/logging"
"time"
)
// Middleware para logging de solicitudes HTTP
func requestLoggerMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
start := time.Now()
// Crear un responseWriter personalizado para capturar el status code
rw := &responseWriter{ResponseWriter: w, statusCode: http.StatusOK}
// Llamar al siguiente handler
next.ServeHTTP(rw, r)
// Logging después de procesar
duration := time.Since(start)
logging.InfoLogger.Printf(
"%s %s %d %s - %s",
r.Method,
r.RequestURI,
rw.statusCode,
duration,
r.UserAgent(),
)
})
}
// responseWriter personalizado para capturar el status code
type responseWriter struct {
http.ResponseWriter
statusCode int
}
func (rw *responseWriter) WriteHeader(code int) {
rw.statusCode = code
rw.ResponseWriter.WriteHeader(code)
}