Правки миддлвейров
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"
|
||||
)
|
||||
|
||||
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) {
|
||||
handler.ServeHTTP(w, r)
|
||||
next.ServeHTTP(w, r)
|
||||
requestID := GetRequestID(r)
|
||||
logger.InfoContext(
|
||||
r.Context(),
|
||||
"request",
|
||||
args := []any{
|
||||
slog.String("proto", r.Proto),
|
||||
slog.String("method", r.Method),
|
||||
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"
|
||||
)
|
||||
|
||||
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) {
|
||||
defer func() {
|
||||
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"
|
||||
)
|
||||
|
||||
func RequestID(handler http.Handler) http.Handler {
|
||||
func RequestID(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
requestID := r.Header.Get(RequestIDHeader)
|
||||
if requestID == "" {
|
||||
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