Правки миддлвейров

This commit is contained in:
Alexander NeonXP Kiryukhin 2024-04-06 20:39:09 +03:00
parent e2509238d2
commit 2e050160b5
Signed by: NeonXP
GPG key ID: 35E33E1AB7776B39
4 changed files with 58 additions and 36 deletions

View file

@ -6,17 +6,24 @@ import (
"log/slog" "log/slog"
) )
func Logger(handler http.Handler, logger *slog.Logger) http.Handler { func Logger(logger *slog.Logger) Middleware {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
handler.ServeHTTP(w, r) next.ServeHTTP(w, r)
requestID := GetRequestID(r) requestID := GetRequestID(r)
logger.InfoContext( args := []any{
r.Context(),
"request",
slog.String("proto", r.Proto), slog.String("proto", r.Proto),
slog.String("method", r.Method), slog.String("method", r.Method),
slog.String("request_uri", r.RequestURI), slog.String("request_uri", r.RequestURI),
slog.String("request_id", requestID), }
if requestID != "" {
args = append(args, slog.String("request_id", requestID))
}
logger.InfoContext(
r.Context(),
"request",
args...,
) )
}) })
}
} }

View file

@ -7,7 +7,8 @@ import (
"log/slog" "log/slog"
) )
func Recover(handler http.Handler, logger *slog.Logger) http.Handler { func Recover(logger *slog.Logger) Middleware {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
defer func() { defer func() {
err := recover() err := recover()
@ -27,6 +28,7 @@ func Recover(handler http.Handler, logger *slog.Logger) http.Handler {
) )
}() }()
handler.ServeHTTP(w, r) next.ServeHTTP(w, r)
}) })
}
} }

View file

@ -14,14 +14,14 @@ const (
RequestIDHeader string = "X-Request-ID" RequestIDHeader string = "X-Request-ID"
) )
func RequestID(handler http.Handler) http.Handler { func RequestID(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
requestID := r.Header.Get(RequestIDHeader) requestID := r.Header.Get(RequestIDHeader)
if requestID == "" { if requestID == "" {
requestID = uuid.NewString() requestID = uuid.NewString()
} }
handler.ServeHTTP(w, r.WithContext(context.WithValue(r.Context(), RequestIDKey, requestID))) next.ServeHTTP(w, r.WithContext(context.WithValue(r.Context(), RequestIDKey, requestID)))
}) })
} }

13
use.go Normal file
View file

@ -0,0 +1,13 @@
package middleware
import "net/http"
type Middleware func(http.Handler) http.Handler
func Use(handler http.Handler, middlewares ...Middleware) http.Handler {
for _, h := range middlewares {
handler = h(handler)
}
return handler
}