bug fixes
All checks were successful
Dynamic Branch Deploy / build-and-deploy (push) Successful in 1m37s
All checks were successful
Dynamic Branch Deploy / build-and-deploy (push) Successful in 1m37s
This commit is contained in:
60
middleware.go
Normal file
60
middleware.go
Normal file
@@ -0,0 +1,60 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Wir bauen unseren eigenen ResponseWriter, der den Status-Code "mitschreibt"
|
||||
type StatusRecorder struct {
|
||||
http.ResponseWriter
|
||||
Status int
|
||||
}
|
||||
|
||||
// Überschreiben der WriteHeader Methode, um den Code abzufangen
|
||||
func (r *StatusRecorder) WriteHeader(status int) {
|
||||
r.Status = status
|
||||
r.ResponseWriter.WriteHeader(status)
|
||||
}
|
||||
|
||||
// Die eigentliche Middleware Funktion
|
||||
func Logger(next http.HandlerFunc) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
// 1. Startzeit messen
|
||||
start := time.Now()
|
||||
|
||||
// 2. Recorder initialisieren (Standard ist 200 OK)
|
||||
recorder := &StatusRecorder{
|
||||
ResponseWriter: w,
|
||||
Status: http.StatusOK,
|
||||
}
|
||||
|
||||
// 3. Den echten Handler aufrufen (mit unserem Recorder)
|
||||
next(recorder, r)
|
||||
|
||||
// 4. Dauer berechnen
|
||||
duration := time.Since(start)
|
||||
|
||||
// 5. Loggen
|
||||
// Format: [METHODE] PFAD | STATUS | DAUER | IP
|
||||
// Beispiel: [POST] /api/validate | 200 | 1.2ms | 127.0.0.1
|
||||
|
||||
icon := "✅"
|
||||
if recorder.Status >= 400 {
|
||||
icon = "⚠️"
|
||||
}
|
||||
if recorder.Status >= 500 {
|
||||
icon = "🔥"
|
||||
}
|
||||
|
||||
log.Printf("%s [%s] %s | %d | %v | %s",
|
||||
icon,
|
||||
r.Method,
|
||||
r.URL.Path,
|
||||
recorder.Status,
|
||||
duration,
|
||||
r.RemoteAddr,
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user