shad-go/middleware/requestlog
2024-06-05 20:36:34 +03:00
..
README.md Updated to the most recent version, which uses go 1.22 2024-06-05 20:36:34 +03:00
requestlog.go Add middleware task 2023-03-25 03:08:19 +04:00
requestlog_test.go Updated to the most recent version, which uses go 1.22 2024-06-05 20:36:34 +03:00

requestlog

Реализуйте middleware логирующую запросы.

Для логирования вам нужно использовать библиотеку zap. Прочитайте README на библиотеку, этого должно быть достаточно для выполнения задания. Вам нужно использовать structured формат логов.

logger.Info("failed to fetch URL",
  // Structured context as strongly typed Field values.
  zap.String("url", url),
  zap.Int("attempt", 3),
  zap.Duration("backoff", time.Second),
)
  • Каждый запрос должен писать в лог две строчки. Одну строчку до начала обработки запроса и одну строчку после конца обработки запроса.
  • Обе строчки должны содержать поля path и method, соответствующие полям запроса.
  • Так же обе строчки должны содержать поле request_id с уникальным идентификатором запроса. Как вы сгенерируете этот идентификатор не важно, главное чтобы он был уникальным и совпадал. Это поле нужно, чтобы по первой строчке можно было найти вторую и по второй - первую.
  • Вторая строчка должна содержать поле duration с временем исполнения запроса.
  • Вторая строчка должна содержать поле status_code со кодом возврата. Чтобы сохранить это поле, вам нужно написать обёртку над http.ResponseWriter. Можете сделать это сами, а можете воспользоваться библиотекой httpsnoop.
  • Сообщение в первой строчке всегда должно быть request started
  • Сообщение во второй строчке должно быть либо request finished, либо request panicked. Если обработчик запроса паниковал, ваша middleware не должна глотать эту панику. Она должна только логировать, что паника случилась, и пробрасывать панику дальше.