diff --git a/logrus/logrusentry.go b/logrus/logrusentry.go index e6739950..1ac9da44 100644 --- a/logrus/logrusentry.go +++ b/logrus/logrusentry.go @@ -172,9 +172,16 @@ func (h *Hook) entryToEvent(l *logrus.Entry) *sentry.Event { } key := h.key(FieldRequest) - if req, ok := s.Extra[key].(*http.Request); ok { + switch request := s.Extra[key].(type) { + case *http.Request: delete(s.Extra, key) - s.Request = sentry.NewRequest(req) + s.Request = sentry.NewRequest(request) + case sentry.Request: + delete(s.Extra, key) + s.Request = &request + case *sentry.Request: + delete(s.Extra, key) + s.Request = request } if err, ok := s.Extra[logrus.ErrorKey].(error); ok { diff --git a/logrus/logrusentry_test.go b/logrus/logrusentry_test.go index d44af1bc..472950e1 100644 --- a/logrus/logrusentry_test.go +++ b/logrus/logrusentry_test.go @@ -166,6 +166,44 @@ func Test_entryToEvent(t *testing.T) { Logger: "logrus", }, }, + "sentry request": { + entry: &logrus.Entry{ + Data: map[string]any{ + FieldRequest: sentry.Request{ + URL: "http://example.com/", + Method: http.MethodGet, + }, + }, + }, + want: &sentry.Event{ + Level: "fatal", + Extra: map[string]any{}, + Request: &sentry.Request{ + URL: "http://example.com/", + Method: http.MethodGet, + }, + Logger: "logrus", + }, + }, + "sentry pointer to request": { + entry: &logrus.Entry{ + Data: map[string]any{ + FieldRequest: &sentry.Request{ + URL: "http://example.com/", + Method: http.MethodGet, + }, + }, + }, + want: &sentry.Event{ + Level: "fatal", + Extra: map[string]any{}, + Request: &sentry.Request{ + URL: "http://example.com/", + Method: http.MethodGet, + }, + Logger: "logrus", + }, + }, "error": { entry: &logrus.Entry{ Data: map[string]any{