Private
Public Access
1
0

bug fixes
All checks were successful
Dynamic Branch Deploy / build-and-deploy (push) Successful in 1m37s

This commit is contained in:
Sebastian Unterschütz
2025-11-25 23:36:09 +01:00
parent 3bf339f0ec
commit fc8b22dd7c
8 changed files with 133 additions and 417 deletions

60
middleware.go Normal file
View 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,
)
}
}