// Middleware to Log out requests and response status code package middleware import ( "log" "net/http" "forgejo.gwairfelin.com/max/gonotes/internal/conf" ) // Response writer that store the status code for logging type loggingResponseWriter struct { http.ResponseWriter statusCode int } func NewLoggingResponseWriter(w http.ResponseWriter) *loggingResponseWriter { return &loggingResponseWriter{w, http.StatusOK} } func (w *loggingResponseWriter) WriteHeader(code int) { w.statusCode = code w.ResponseWriter.WriteHeader(code) } // Middleware to log out requests and response status code func LoggingMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { lwr := NewLoggingResponseWriter(w) next.ServeHTTP(lwr, r) if conf.Conf.LogAccess { log.Printf("%s %s %s%s %d", r.RemoteAddr, r.Method, r.Host, r.URL.Path, lwr.statusCode) } }) }