Логи — это дневник приложения, в который записывают что, где и когда произошло. В приложениях на Рельсах каждый ХТТП‑запрос заносится в лог с дополнительной информацией: айпи‑адрес, урл, таймштамп, параметры, выполненные SQL‑запросы и общее время выполнения.

По логам разработчики понимают, что делал пользователь до ошибки, что происходило в этот момент в системе. Так логи помогают находить ошибки, связанные с данными и их синхронизацией.

В Школьном кабинете

Преподаватель выставляет оценки за задание. Ставит четвёрку за логику, четвёрку за идею. Меняет мнение и исправляет оценку за идею на тройку. Кабинет считает среднее и вместо 3,5 показывает 3,66.

В логах видно, что за идею пришли две оценки: затупил интернет, оценки пришли одновременно. Сервер начал одновременно обрабатывать обе оценки в отдельных транзакциях. Когда сервер закончил, оценок стало три: две за логику и одна за идею.

Также логи помогают получить недостающую информацию о трудноуловимых багах:

В Издательстве бюро

В черновиках книг происходит мистика: иногда книга открывается и начинает перепрыгивать между разворотами, при скролле развороты мигают и не обновляют урл. Проблема появляется только в Сафари, после рефреша всё встает на место.

Пытаемся повторить и изолировать проблему: локально проблема не повторяется, вручную повторить не получается. Разработчики на две недели переходят на Сафари, чтобы повторить баг — ни одного случая.

Понимаем, что нам не хватает информации о проблеме. Добавляем в книги внутренний лог: в каком порядке и когда книга загружает‑выгружает развороты. Просим помощи у авторов: если автор встречает «прыжки», собирает и отправляет лог нам.

Даже спустя два десятка таких отчётов не понимаем, в чём проблема. Добавляем ещё информации в лог: когда книга запустилась, в каких координатах были развороты, менялись ли размеры окна.

В новом логе обнаруживаем, что книга инициализируется дважды: одновременно работают две книги в одном окне. Это объясняет прыжки и мигания: книги сделали расчёты в разных координатах и борются за загрузку разворотов, которые, как им кажется, должны быть сейчас видимы.

За инициализацию книг отвечает скрипт, дожидающийся загрузки шрифтов. Когда скрипт не дожидался загрузки шрифтов в разумное время, он насильно запускал книгу, не отменяя предыдущих инструкций. Когда шрифты догружались, книга запускалась ещё раз.

Кроме того, логи можно использовать для аудита и предотвращения ошибок:

В Издательстве бюро

В книжном билинге все операции, события и платежи по подписке читателя записываются в лог в БД. Информацию о платежах использует Аудитор — внутренний сервис, ничего не знающей о логике билинга и не зависящий от его багов.

Аудитор ищет подозрительные паттерны в логе списаний:

  • подписка активна, а последний платеж несколько месяцев назад;

  • с последнего списания с пользователя прошло меньше 20 дней;

  • последний платеж — больше месяца назад, и других попыток нет;

  • слишком много неудачных списаний в месяц;

  • слишком много неудачных списаний, а подписка активна.

Если Аудитор обнаруживает проблему, он блокирует платежи, останавливает очередь списаний и бьёт тревогу.

Чтобы логи были ещё полезнее, советую обратить внимание на айпи‑адреса и идентификаторы запросов. Так как приложения чаще всего разворачивают за прокси‑серверами, важно, чтобы в логах был реальный айпи‑адрес клиента, а не прокси‑сервера. Чтобы логи запросов не перемешивались друг с другом, их стоит отделить уникальными идентификаторами:

Рельсы помечают все сообщения, связанные с запросом, тегом — уникальным идентификатором запроса

Ещё по теме

P. S. Это был совет о веб‑разработке. Хотите знать всё о коде, тестах, фронтенд‑разработке, цеэсэсе, яваскрипте, рельсах и джейде? Присылайте вопросы.

Веб‑разработка
Отправить
Поделиться
Запинить

Рекомендуем другие советы