Files
tp/main_dc/BB/api_bb/pkg/middleware/logger.go
T
valitovgaziz 15357fd3c0 create and moove into new directories for BegushiyBashkir and
yalarbacreate and moove into new directories for BegushiyBashkir and
yalarbacreate and moove into new directories for BegushiyBashkir and
yalarbacreate and moove into new directories for BegushiyBashkir and
yalarbacreate and moove into new directories for BegushiyBashkir and
yalarbacreate and moove into new directories for BegushiyBashkir and
yalarbacreate and moove into new directories for BegushiyBashkir and
yalarbacreate and moove into new directories for BegushiyBashkir and
yalarbacreate and moove into new directories for BegushiyBashkir and
yalarba
2025-10-24 05:22:44 +05:00

46 lines
1.4 KiB
Go

// pkg/middleware/logger.go
package middleware
import (
"net/http"
"time"
"api_bb/pkg/logger"
"github.com/go-chi/chi/v5/middleware"
"go.uber.org/zap"
)
// Logger middleware для логирования HTTP запросов
func ZapLogger(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
start := time.Now()
// Получаем request ID
reqID := middleware.GetReqID(r.Context())
// Создаем логгер с контекстом запроса
requestLogger := logger.Get().With(
zap.String("method", r.Method),
zap.String("path", r.URL.Path),
zap.String("remote_addr", r.RemoteAddr),
zap.String("user_agent", r.UserAgent()),
zap.String("request_id", reqID),
)
// Обертываем ResponseWriter для получения статуса
wrappedWriter := middleware.NewWrapResponseWriter(w, r.ProtoMajor)
// Обрабатываем запрос
next.ServeHTTP(wrappedWriter, r)
// Логируем результат
duration := time.Since(start)
requestLogger.Info("request completed",
zap.Int("status", wrappedWriter.Status()),
zap.Int("bytes", wrappedWriter.BytesWritten()),
zap.Duration("duration", duration),
)
})
}