Профилактика багов
Как исправить баг
Управление багами
Профилактика багов
Как исправить баг
Управление багами
Логи — это дневник приложения, в который записывают что, где и когда произошло. В приложениях на Рельсах каждый
По логам разработчики понимают, что делал пользователь до ошибки, что происходило в этот момент в системе. Так логи помогают находить ошибки, связанные с данными и их синхронизацией.
В Школьном кабинете
Преподаватель выставляет оценки за задание. Ставит четвёрку за логику, четвёрку за идею. Меняет мнение и исправляет оценку за идею на тройку. Кабинет считает среднее и вместо 3,5 показывает 3,66.
В логах видно, что за идею пришли две оценки: затупил интернет, оценки пришли одновременно. Сервер начал одновременно обрабатывать обе оценки в отдельных транзакциях. Когда сервер закончил, оценок стало три: две за логику и одна за идею.
Также логи помогают получить недостающую информацию о трудноуловимых багах:
В Издательстве бюро
В черновиках книг происходит мистика: иногда книга открывается и начинает перепрыгивать между разворотами, при скролле развороты мигают и не обновляют урл. Проблема появляется только в Сафари, после рефреша всё встает на место.
Пытаемся повторить и изолировать проблему: локально проблема не повторяется, вручную повторить не получается. Разработчики на две недели переходят на Сафари, чтобы повторить баг — ни одного случая.
Понимаем, что нам не хватает информации о проблеме. Добавляем в книги внутренний лог: в каком порядке и когда книга загружает‑выгружает развороты. Просим помощи у авторов: если автор встречает «прыжки», собирает и отправляет лог нам.
Даже спустя два десятка таких отчётов не понимаем, в чём проблема. Добавляем ещё информации в лог: когда книга запустилась, в каких координатах были развороты, менялись ли размеры окна.
В новом логе обнаруживаем, что книга инициализируется дважды: одновременно работают две книги в одном окне. Это объясняет прыжки и мигания: книги сделали расчёты в разных координатах и борются за загрузку разворотов, которые, как им кажется, должны быть сейчас видимы.
За инициализацию книг отвечает скрипт, дожидающийся загрузки шрифтов. Когда скрипт не дожидался загрузки шрифтов в разумное время, он насильно запускал книгу, не отменяя предыдущих инструкций. Когда шрифты догружались, книга запускалась ещё раз.
Кроме того, логи можно использовать для аудита и предотвращения ошибок:
В Издательстве бюро
В книжном билинге все операции, события и платежи по подписке читателя записываются в лог в БД. Информацию о платежах использует Аудитор — внутренний сервис, ничего не знающей о логике билинга и не зависящий от его багов.
Аудитор ищет подозрительные паттерны в логе списаний:
подписка активна, а последний платеж несколько месяцев назад;
с последнего списания с пользователя прошло меньше 20 дней;
последний платеж — больше месяца назад, и других попыток нет;
слишком много неудачных списаний в месяц;
слишком много неудачных списаний, а подписка активна.
Если Аудитор обнаруживает проблему, он блокирует платежи, останавливает очередь списаний и бьёт тревогу.
Чтобы логи были ещё полезнее, советую обратить внимание на айпи‑адреса и идентификаторы запросов. Так как приложения чаще всего разворачивают за прокси‑серверами, важно, чтобы в логах был реальный айпи‑адрес клиента, а не прокси‑сервера. Чтобы логи запросов не перемешивались друг с другом, их стоит отделить уникальными идентификаторами:
Ещё по теме
P. S. Это был совет о веб‑разработке. Хотите знать всё о коде, тестах, фронтенд‑разработке, цеэсэсе, яваскрипте, рельсах и джейде? Присылайте вопросы.