shad-go/middleware/requestlog/README.md

31 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# requestlog
Реализуйте middleware логирующую запросы.
Для логирования вам нужно использовать библиотеку zap. Прочитайте [README](https://github.com/uber-go/zap)
на библиотеку, этого должно быть достаточно для выполнения задания. Вам нужно использовать `structured`
формат логов.
```go
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](https://github.com/felixge/httpsnoop).
* Сообщение в первой строчке всегда должно быть `request started`
* Сообщение во второй строчке должно быть либо `request finished`, либо `request panicked`.
Если обработчик запроса паниковал, ваша middleware не должна глотать эту панику. Она должна только
логировать, что паника случилась, и пробрасывать панику дальше.