Правки миддлвейров
This commit is contained in:
parent
e2509238d2
commit
2e050160b5
4 changed files with 58 additions and 36 deletions
19
logger.go
19
logger.go
|
@ -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...,
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
})
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
13
use.go
Normal 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
|
||||||
|
}
|
Loading…
Reference in a new issue