Вам нужно, чтобы ваш регистратор находился в области запроса.Вы устанавливаете его глобально для всего обработчика, каждый раз, когда появляется новое соединение, что означает, что вы запрашиваете гонки данных и, как правило, нежелательное поведение.
Для контекста в области запроса, context.Context
в заявке идеально.Вы можете получить к нему доступ через методы Context()
и WithContext
.
Пример:
var loggerKey = "Some unique key"
func (h handler) loggingMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
ctx = context.WithValue(ctx, loggerKey, log.WithFields(log.Fields{"test": "PASS"}))
next.ServeHTTP(w, r.WithContext(ctx)
})
}
Затем для доступа к регистратору:
func doSomething(r *http.Request) error {
log, ok := r.Context().Value(loggerKey).(*log.Logger) // Or whatever type is appropriate
if !ok {
return errors.New("logger not set on context!")
}
// Do stuff...
}