Используя промежуточное ПО Martini, зарегистрируйте ошибку, если код ответа больше 399 - PullRequest
0 голосов
/ 12 февраля 2020

Если мой сервер обрабатывает запрос и пишет код ответа больше 399, я хочу записать трассировку ошибки:

    bm.Use(func(res http.ResponseWriter, req *http.Request, c martini.Context, log *logging.Logger, statter statsd.Statter) {

        start := time.Now()

        rw := res.(martini.ResponseWriter)

        c.Next()  // do all the middleware handler stuff

        if res.(martini.ResponseWriter).Status() > 399 {
            log.Warning("%v", "print response here")  // how to read response here
        }

})

есть способ прочитать ответ, учитывая код состояния ? Если мы отправим сообщение об ошибке клиенту, как я могу перехватить сообщение об ошибке и записать его в журнал?

1 Ответ

1 голос
/ 12 февраля 2020

Я нашел c.MapTo в файле Readme Мартини. Если я правильно понимаю, это должно работать:

bm.Use(func(res http.ResponseWriter, req *http.Request, c martini.Context, log *logging.Logger, statter statsd.Statter) {

    var rsp bytes.Buffer

    rw := io.MultiWriter(res, &rsp)

    c.MapTo(rw, (*http.ResponseWriter)(nil))

    c.Next()  // do all the middleware handler stuff

    if res.(martini.ResponseWriter).Status() > 399 {
        log.Warning("%v", rsp.String())
    }

})

Обратите внимание, что я не знаком с Мартини, поэтому я не уверен, будет ли это работать.

...