x
 
Василий
12 апреля 2018
Советы почтой каждую неделю
Пожалуйста, получите наше письмо, чтобы подтвердить свой адрес:
Вы подписаны на «Советы за неделю»:

Как бороться с багами? Часть третья: логи


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ещё по теме

P. S. Это был совет о веб-разработке. Хотите знать всё о коде, тестах, фронтенд-разработке, цеэсэсе, яваскрипте, рельсах и джейде? Присылайте вопросы.
Вёрстка и прототипирование — дисциплина Школы дизайнеров. Набор закрыт. Опоздавшим: оставьте нам почту, и мы напишем вам, пока есть свободные места.
 

Поделиться
Отправить

Цель рубрики — обсуждение вопросов дизайна всех видов, текста в дизайне и взаимоотношений дизайнеров с клиентами.

Мы публикуем комментарии, которые добавляют к уже сказанному новые мысли и хорошие примеры. Мы ожидаем, что такие комментарии составят около 20% от общего числа.

Решение о публикации принимается один раз; мы не имеем возможности комментировать или пересматривать свое решение, хотя оно может быть ошибочно. Уже опубликованные комментарии могут быть удалены через некоторое время, если без них обсуждение не становится менее ценным или интересным.

Вот такой веб 2.0.

Как бороться с багами? Часть восьмая: порефлексировать 6 Как бороться с багами? Часть седьмая: исправить




Недавно всплыло

3 В какой программе вы делаете макеты? 7 2 Как объяснить человеку, не обидев его, что это мой проект, и я не хочу выходить за рамки концепции? 2