Инструменты для снятия логов с Android / iOS-устройств. Чтение и разбор
Привет! Сегодня стартует наш четвертый митап для тестировщиков, QAчественное общение. До 18:00 МСК на него все еще можно зарегистрироваться. А пока мы начинаем выкладывать доклады с предыдущего митапа, и начинаем с Ольги, старшего QA-инженера в компании red_mad_robot. Поговорим про мобильные устройства и про снятие логов с этих мобильных устройств, почитаем их и разберем, как вообще с ними работать.

Что вообще такое логи мобильного устройства? Логи – это записи либо сообщения в виде текста. У нас в этом тексте записываются все действия пользователя или как отвечает система на действия пользователя, соответственно, вся та информация, что вы делаете, куда нажимаете на самом устройстве, в приложении – всё это пишется в логи.
Какие логи в принципе бывают? Разделим их на две группы. Первая – это Crash logs, они подразумевают под собой отдельный файл, куда сыпется только информация об экстренном завершении программы. И второй вариант – это просто логи, файл, который является журналом событий, в нём хранятся все системные записи и ответы устройства на действия пользователя.
Уровни логирования
Хочу заметить, что эти уровни логирования больше под Android-логи, потому что именно разделение на Error, Warn, Info, Debug и Verbose в основном вы можете увидеть именно на логах с Android. Плюс, такая же информация чаще всего будет в ваших серверных логах, в принципе, будет довольно полезно изучить их. Что примечательно, каждый уровень включает в себя предыдущий. Если мы возьмем Verbose, фильтрацию по нему, например, то мы будем получать логи со всех предыдущих уровней, то есть абсолютно все логи. Разберем каждый подробно.

Первый – это Error. Ошибки уровня Error – ошибки, которые говорят о работе системы, на них надо очень быстро реагировать и всегда сообщать о них разработчикам.

Например, SpannableStringBuilder – это ошибка приложения, которая говорит нам о том, что текстовое поле, то есть Span, наш элемент, он не может быть нулевым либо пустым. Второй вариант – это системная ошибка ZeroHung. Данная ошибка говорит о том, что у нас происходит утечка памяти, она может быть как от какого-то действия с приложением, так и от самого приложения.

Следующий вариант – Warning. Это тоже ошибки, которые говорят о каком-то неожиданном поведении, которые требуют внимания, но они не такие важные, как error. Например, ошибка из приложения: мы пытаемся декодировать видео в нужное нам качество, в нужный формат, и у нас на этом происходит ошибка. Второй вариант, например, BroadcastQueue. Это ошибка системная, ошибка работы какого-то виджета на вашем устройстве. У меня это был Android Huawei, мне от системы сыпятся такие ошибки.

Следующий уровень – Info. Это уровень логов, на котором нам приходят записи чисто информационного характера о работе системы. Например, в этот уровень будут приходить ваши запросы, которые отправляют приложения на сервер. То есть он будет выглядеть так: http start, здесь вы увидите, какие header’ы отправляются, какое тело отправляется, если оно есть, и так же будете получать ответ от сервера в таком формате: json, key, value, ключ, значение и так далее. Заканчиваться он будет как http end. Далее, системный вариант ошибки или системный вариант лога о том, что сейчас мы намереваемся выключить экран. То есть, эта запись появляется, когда мы просто блокируем экран телефона, и он гаснет. Это у нас падает в информацию.

Далее, уровень Debug. Это тот уровень сообщений, в котором передается информация о процессах отладки или шаги каких-то крупных процессов, то, на что разработчики хотели обратить пристальное внимание. Например, мы просто нажали на качель громкости. Здесь будет, конечно, более подробно внутри этого лога – если вы его поймаете, то увидите конкретно что произошло: мы увеличили звук, уменьшили звук и на какое количество. И второй вариант, например, у вас приложение работает по WebSocket, и вам надо понять, подключились вы вообще или нет. Соответственно, вот это сообщение о том, что коннект произошел (на экране «b$b: WebSocket connected»).

Следующий уровень Verbose. Это уровень самого низкого приоритета, там сыпятся вообще все логи, там будет какая-то дополнительная информация, которая не вошла в Info, например. К примеру, у нас всплывает окно, мы его закрываем, у нас WindowManager, и мы здесь видим, что-либо добавилось, либо все удалилось. Далее, вся информация о геолокации. Например, у нас есть LocationProvider. В более расширенном варианте там будет полностью писаться ваша геолокация вплоть до долготы и широты. И третий пример, тоже связанный со звуком, то есть какой у нас звук и насколько он громкий. То есть, например, volume 10 это у нас максимальный звук, и мы его увеличили до такого варианта (на экране «AudioManager: getStreamVolume streamType: 3 volume: 10»). Очень похож на Info, но, я бы сказала, что более подробная информация на него передается.
Чем снимать логи?
Android

Первый инструмент – это Android Studio, в частности, его утилита Logcat. Что надо для того, чтобы начать снимать логи через Android Studio? Первое, конечно же, необходимо перевести устройство в режим разработчика. В настройках вы ищете номер вашего билда или операционной системы, в зависимости от того, на каком устройстве вы собираетесь смотреть, оно меняется от производителей. Нажимаете около 10 раз на эту информацию, и у вас появляется сообщение «Не желаете ли вы перевести ваше устройство в режим разработчика?». Нажимаете «Ок», и ваш телефон уже не такой обычный. Далее, вам надо подключить это устройство по USB к вашему компьютеру, конечно же, установить на сам компьютер Android Studio, он устанавливается как на Windows, так и на MacOS, тут проблем никаких нет.

Открывая Android Studio, выбираем вкладку Logcat. Под цифрой 1 то, где найти это сокровенное слово. Нажимая на него, переходим в сообщения в реальном времени. Под цифрой 2 окно, где мы выбираем телефон, с которого будем снимать логи. Соответственно, если ничего не подключено либо ваш телефон не виден, здесь вы ничего не сможете выбрать. Под цифрой 3 интересный момент: если вы хотите полностью снимать все логи (системные и со всех приложений, которые у вас сыпятся), не выбирайте здесь ничего. Если вы выберете какое-то конкретное приложение, которое debug’ное, у вас будут показываться логи исключительно по нему. Рядом с цифрой 3 вы видите слово Verbose – это уровень того лога, который вы хотите видеть. То есть, если вы выберете Error, будут только Error’ы. И под цифрой 4 у вас поле поиска. Это то поле, где вы сможете фильтровать выдачу по приложению, по уровню, по какой-то утилите, которая вам нужна, соответственно, это у нас regular выражение, и там все довольно просто ищется по совпадению. Вариант второго скриншота – это я уже выбрала конкретную сборку, и мы видим, что у нас по этой сборке сыпятся логи.

Перейдем к следующему варианту. Это через терминал снимать через тот же самый Logcat. Нам нужно, чтобы устройство стояло в режиме разработчика, подключаем это устройство по USB к компьютеру, на компьютер надо установить Android Debug Bridge. Открываем терминал и пишем две команды: первая – «abd devices», которая показывает, какие устройства подключены и какие adb видит устройства, второй командой мы говорим: «Запусти утилиту Logcat у конкретного устройства». То есть, при первой команде вы увидите, как ваше устройство называется, во второй команде вы его просто дополняете. Как это выглядит: вот мой терминал, я вижу то, что мое устройство называется 7BKDU… , оно подключено по USB, и мой Mac его видит. Я ввожу команду abd – s «название устройства» Logcat.

Дальше у вас в терминале, примерно так же, как и в Android Studio, будут в режиме реального времени сыпаться логи. Разберем, как их читать. Под цифрой 1 будет дата и время, когда пришла запись. Под цифрой 2 – маленький столбец, где вы видите буквы V, D, E, I и так далее. Это как раз те самые уровни нашего логирования Debug, Verbose, Warning или Info. В графе 3 – названия – инструменты, утилиты или части ОС, откуда идет сообщение, и, соответственно, его расшифровка – что конкретно у нас происходит. Конечно, выглядит это так, что в Android’е это все намного удобнее и приятнее, легко можно фильтровать. В Terminal’е фильтровать будет уже посложнее, надо будет менять саму команду, добавлять ключи, которые бы фильтровали выдачу по уровню либо по отдельному приложению.

Третий вариант, которым вы можете воспользоваться для снятия логов, это SDK Platform Tools. Для этого нам надо перевести устройство в режим разработчика и подключить его к компьютеру по USB, скачать на компьютер папку SDK Platform Tools, она есть под разные операционные системы. Далее открываем папку в терминале, именно чтобы была открыта папка SDK Platform Tools. Затем пишем команду «adb logcat – d – v time > .log.txt», что говорит о том, что конкретно и в каком варианте мы хотим видеть в этих логах (то есть время, приоритеты, тэги различные) и говорим, что мы хотим сохранять эти логи в log.txt. Вот мы написали команды и начинаем выполнять действия на нашем устройстве, то есть, нажимать на различные компоненты либо воспроизводить баг, который вам мешает, и вы хотите снять с него логи. Далее прерываете выполнение этой команды (на Mac это ctrl+C), и в нашу папку добавляется этот лог (android – debug.log).

Открываем его, как мы видим, информация похожа на ту, что в Terminal, единственное, как вы прекратили команду, этот файл больше не обновляется до тех пор, пока вы снова не повторите эту команду. Опять же, в таблице 1 мы видим дату и время прихода сообщения, таблица 2 – уровень наших логов, в таблице 3 мы видим, от какой части системы у нас сыпятся данные, лог и его расшифровка.
iOS

Конечно же, первое, о чем я хотела бы рассказать, это xCode и встроенный для него симулятор. К сожалению, xCode – программа только для MacOS. Чтобы снять с симулятора логи, нужно установить xCode, зайти в меню, открыть Developer Tools и симулятор. Симулятор – дополнительная программа, которая позволяет воспроизводить работу системы, если у вас нет физического девайса.
В этот симулятор мы устанавливаем нужное нам приложение, выбираем, какой конкретно IPhone, его размеры, разрешение и операционную систему. И уже в симуляторе выбираем пункт «Debug» и «Open System Log». Это выглядит так: я выбираю в самом симуляторе папку Debug и подвкладку Open System Log. Он точно так же идет в режиме реального времени, но они (логи) выведены по-другому, не так, как на Android.

Мы видим, что тут уже нет уровня логирования, есть дата и время. Цифра 2 – сообщение, что мы вообще видим. Мы видим, с какого устройства была снята информация.
В моем случае это имя моего Mac. Видим дополнительную запись, с какого элемента системы это сообщение пришло и его расшифровка. Например, в логах IOS придётся поковыряться чуть поподробнее, чем в Android.

Второй инструмент тоже связан с xCode, но он идет по другой «дорожке». Это Devices and Simulator. Устанавливаем xCode, подключаем устройство по USB, тут уже важно, чтобы было реальное устройство. В самом xCode открываем вкладку Window, там выбираем подвкладку Devices and Simulator. Нажимаем у устройства «Open Console». На панели видим название нашего устройства, какая у него операционная система, модель, и правее этой кнопки нам интересно «Open Console».

Под цифрой 1 мы видим все приложения, которые дополнительно установлены на наши устройства, в колонке под цифрой 2 – версия этого устройства, которую разработчик указывает. Третье пишется URL нашего устройства. То есть, например, у вашего разработчика, у вашей компании, у вашего приложения есть свой URL, по которому он ходит. Соответственно, здесь он отражен.
Как это все выглядит: здесь довольно удобно отслеживать, как сыпятся логи. Они тоже сыпятся в реальном времени, и, если их никак не фильтровать, они будут постоянно падать, но здесь все удобно смотреть. У нас есть время этого сообщения, процесс – это с какой части системы, приложения пришло сообщение. В колонке «Сообщение» мы видим подробное описание того, что происходит, что не так, вся сервисная системная информация. Что интересно, именно в Devices and Simulator есть поиск, который позволяет фильтровать выдачу. То есть, справа сверху мы можем написать название нашего приложения, и у нас все отфильтруется по процессу. Также мы можем приостановить выдачу по кнопке, и тогда логи перестануть хаотично и беспорядочно сыпаться (чтобы удобнее искать то, что вы хотите найти на устройстве).
Как снимать логи с IOS на Windows

Есть приложение iMazing, которое ставится на Windows и MacOS. Подключаете устройство по USB и в меню выбираете «показать консоль устройства». В целом, это приложение платное, однако, снять логи с устройства можно на триальной версии, она никак не ограничивается. У нас открывается следующее окно: мы видим, какое устройство у нас подключено, мы видим аккаунт, и в меню мы видим как раз «показать консоль устройства».

Если мы на нее нажмем, увидим следующее. Первый квадрат – это дата и время, когда мы получили это сообщение, второй пункт – от кого, с какого устройства, так как это уже реальный девайс, он называется у нас «IP-040». Далее, пишется, с какой части системы прилетело сообщение и его описание. Под цифрой 3 мы видим поле поиска. Мы можем фильтровать эту выдачу, можем остановить поток входящих логов по кнопке «пауза» и отфильтровать ее в поле поиска. Это поможет вам сконцентрироваться на конкретном запущенном приложении. Также у iMazing можно эти логи сохранять по соответствующей кнопке.
[iOS] Просмотр системных логов
Существует несколько способов просмотреть логи с iOS-устройства.
1. Через само устройство — в этом случае посмотреть можно лишь только краш-репорты (crashlog), но ведь это самое то для тестировщика! Идем в «Settings» -> «General» -> «About» -> «Diagnostic & Usage» -> «Diagnostic & Usage Data» и смотрим все доступные отчеты о падении приложений. Единственная проблема заключается в том, что здесь нет удобного средства для экспорта этих самых отчетов. Тем не менее, при крайней необходимости можно скопировать нужный участок лога через стандартную функцию копирования текста.
2. Через XCode — к сожалению, среда разработки XCode доступна исключительно для MacOS. По этой и многим другим причинам было бы неплохо, если тестировщики iOS-приложений имели в своем распоряжении хотя бы Mac mini. Для просмотра краш-репортов нужно подключить iOS-устройство к компьютеру, нажать кнопку «Use for Development», после чего в разделе «Device Logs» уже можно непосредственно просматривать логи и, что не маловажно, импортировать их!

3. Через программу «iPhone Configuration Utility» — хотя основная функция этой утилиты заключается в настройки профилей для iOS-устройств, в ней имеется консоль, куда выводятся все логи с подключенного устройства. Незаменимая вещь для тестировщика. К тому же, утилита доступна и для Windows.

4. Через синхронизацию iTunes — каждый раз, когда вы синхронизируете свое iOS-устройство с iTunes на компьютере, логи сохраняются в следующие директории:
Mac OS X:
~/Library/Logs/CrashReporter/MobileDevice/
Windows XP
C:\Documents and Settings\\Application Data\Apple Computer\Logs\CrashReporter\MobileDevice\
Windows Vista or 7
C:\Users\\AppData\Roaming\Apple Computer\Logs\CrashReporter\MobileDevice\
Как снять логи для iOS и Android приложений


Мобильное приложение или приложение — это программное обеспечение, предназначенное для работы на смартфонах, планшетах и других мобильных устройствах.
Загружаются из магазина приложений (Google Play или App Store) на мобильном устройстве.
Виды мобильных приложений:
- Нативные
- Веб-приложения
- Гибридные
Распространенные причины возникновения багов в мобильных приложениях:
- Проблемы при установке/удалении мобильных приложений
- Проблемы с поддержкой различных версий ОС и устройств
- Проблемы с соблюдением принципов безопасности
- Проблемы с большим потреблением ресурсов девайса
- Проблемы со скоростью запуска и работы приложения
- Проблемы локализации
- Проблемы при вращении экрана
- Проблемы с непонятными пользователям сообщениями об ошибке
- Проблемы при подключении к интернету
- Проблемы, связанные с условиями работы офлайн
- Проблемы, связанные с низким уровнем заряда батареи
- Проблемы после перезагрузки телефона
- Проблемы после входящих звонков и SMS
Важную роль при диагностировании ошибок в мобильных приложениях играют логи.
Логи и их виды
Логи — это записи или сообщения в виде текста, в которых записываются все действия пользователя или ответы системы на действия пользователя, то есть, вся информация о том, что пользователь делает и что нажимает на самом устройстве в приложении.
Логи предназначены для того, чтобы более подробно воспроизвести ошибку, разобраться, в чем именно состоит проблема, и легче найти пути ее решения.
Виды логов
Логи мобильных приложений делятся на два основных вида: консольные (обычные) логи и креш-логи.
Консольные логи — это лог-файлы, являющиеся журналом событий и содержащие все записи о системных событиях, ответы устройства на действия пользователя, которые обновляются в режиме реального времени.
Креш-логи — это лог-файлы, которые создаются после экстренного завершения работы программы (креша). Файлы креш-логов имеют расширение .crash или .ips. Креш-логи содержат информацию с момента запуска программы и до экстренного завершения программы.
Как снять логи мобильных приложений
Существуют разные варианты снятия логов для мобильных приложений в зависимости от операционной системы телефона (Android, iOS).
Как снять логи с iOS
Одним из самых распространенных способов для получения логов для приложений iOS является получение с помощью XCode.
XCode — это среда разработки программного обеспечения для платформ macOS и iOS.
Для снятия логов через XCode необходимо:
- Установить XCode
- Подключите устройство к Mac
- Запустить XCode
- Открыть вкладку «Window» — «Devices and Simulators»
- Нажать кнопку «View Device Logs»
- Найти нужный лог-файл и скопировать его в текстовый файл
Также получить логи можно с помощью iMazing (доступно как для Windows, так и для MacOS).
Как снять логи с Андроид
Для того, чтобы снять с Android логи приложения, понадобится Android Studio.
Android Studio — интегрированная среда разработки (IDE) для платформы Android.
Для снятия логов с помощью Android Studio нужно:
- Установить Android Studio
- Создать новый проект в «Android Studio» (при создании нового проекта нужно правильно указать версию Android девайса, с которого необходимо снять логи)
- Включить режим разработчика на Android девайсе
- Подключить устройство через USB к компьютеру
- Выбрать девайс в Android Studio
- Выберите вкладку LogCat
- Воспроизвести ошибку на девайсе или найти по дате воспроизведения логи (если мы знаем время, когда воспроизводилась проблема)
- Выделить нужные логи и скопировать их (правой клавишей мыши → Copy или Ctrl+C)
- Создать файл .txt, добавить в него логи и сохранить их
Также для снятия логов с Android девайсов можно использовать Minimal ADB приложение.
- XCode — https://developer.apple.com/xc.
- Android Studio — https://developer.android.com/.
- iMazing — https://imazing.com/download
Как снять логи при краше мобильного приложения?
Всем привет! Я Tech Lead QA в мобильной разработке. При тестировании приложений иногда сталкиваемся со сбоем приложения. И в таких ситуациях очень важно уметь собирать логи с устройства, чтобы максимально быстро пофиксить ошибки. В этой статье я хотел бы рассказать, как мы это делаем в Альфа-Банке.
Осторожно, в статье много картинок.
Как получить логи с Android?
Есть, как минимум, 3 способа, с помощью которых можно получить логи при краше приложения:
- По USB из Android Studio.
- По USB через утилиту adb.
- Через приложение Crash Log Viewer — Show App Cr.
Перед тем, как начать снимать логи одним из трех перечисленных способов, настраиваем и подключаем девайс по USB.
Подготовка девайса
№1. Включаем режим разработчика. У разных моделей и производителей этот режим включается по разному. Но тут нет ничего сложного, 5 минут погуглить, как включается этот режим у вашей модели и всё получится.
№2. Переходим в настройки и заходим в раздел «Для разработчика» и включаем «Отладку по USB».

№3. Подключаем девайс по USB к ПК и разрешаем отладку по USB.

Девайс готов, теперь можно снимать логи. Рассмотрим первый способ.
Android Studio
Есть два способа установить Android Studio на ПК.
- С официального сайта developer.android.
- Скачиваем и устанавливаем себе JetBrain Toolbox.
Я предпочитаю второй способ, потому как легко обновлять Android Studio и заодно можно установить другие продукты JetBrain.
№1. После установки Android Studio на ПК запускаем приложение, создаём любой проект и переходим в раздел «Logcat».

№2. Выбираем девайс, подключенный по USB, и уровень логирования error.

№2.1. Можно составить фильтр из нескольких условий. Например, уровень логирования и названия приложения, которое хотите отфильтровать. Тогда мы получим логи только по этим параметрам.

Готово. Чтобы получить логи краша приложения и передать их компетентным сотрудникам (или разобраться самому) этого достаточно. Если этого алгоритма недостаточно — есть другие способы фильтрации, описанные на официальном сайте Android Studio.
Перейдем ко второму способу.
Android Debug Bridge (adb)
Сначала идем на официальный сайт Android по ссылке и устанавливаем на ПК утилиту adb.
№1. Открываем консоль и ищем ID девайса.
№2. Получаем ID девайса, подключенного по USB.
List of devices attached
8HVKGMRKN78TMZYH device
8HVKGMRKN78TMZYH — ID моего девайса. У вас он будет другим, но состоящим из подобного набора символов.
№3. Запускаем сбор логов с устройства в файл, командой.
adb logcat -b crash > log_crash_am.log
Теперь на смартфоне можно повторить действия, которые приводят к сбою приложения.
Чтобы остановить сбор логов, достаточно в консоли нажать комбинацию CTRL+C. Готово.
И последний способ получить логи с Android — через приложение…
Crash Log Viewer — Show App Cr
С Google Play устанавливаем приложение на девайс.

№1. Запускаем приложение и выбираем Crash Log Viewer.

После чего должно открыться окно с двумя adb командами.

№2. Открываем терминал на ПК и последовательно выполняем 2 команды, которые были указаны в приложении.
adb shell pm grant com.arumcomm.crashlogviewer android.permission.PACKAGE_USAGE_STATS
adb shell pm grant com.arumcomm.crashlogviewer android.permission.READ_LOGS
№3. Отключаем девайс от ПК после выполнения команд.
Теперь мы готовы к сбору логов через Crash Log Viewer. При любом краше приложение будет автоматически их собирать.
Чтобы получить или отправить логи запускаем приложение, переходим в раздел «Crash Log Viewer». Там появится список приложений, у которых был краш.

Логи приПереходим в интересующее приложение и смотрим логи, когда приложение «крашнулось».

Логи можно скопировать или поделиться.

Мне нравится снимать логи краша приложения на Android при помощи приложения, потому что:
- девайс не нужно каждый раз подключать по USB к ПК;
- не нужно настраивать фильтрацию и потом искать нужные записи в логах.
Как получить логи с iOS?
- Непосредственно на самом девайсе.
- Через Xcode.
Начнем с девайса.
Снять логи непосредственно с девайса iOS
№1. Переходим на iOS в «Настройки» → «Конфиденциальность».

№2. Идем в раздел «Аналитика и улучшения».

№3. Открываем «Данные Аналитики».

И попадаем в список логов девайса.

№4. Чтобы отфильтровать логи интересующего приложения, вводим в строку поиска его название.

№5. Проваливаемся в запись и видим логи приложения.

Теперь вы знаете, где хранятся логи в iOS и после воспроизведения краша приложения сможете найти их и отправить своим коллегам.
Переходим ко второму способу.
Сбор из приложения XCode
Этот способ требует определённой подготовки.
Для начала устанавливаем XCode на Mac. Да, к сожалению iOS дружит только с себе подобными.

Из-за большого размера XCode может устанавливаться немного дольше, чем вы планировали, так что можно налить себе чаёк и посмотреть любимый сериальчик.
Итак, XCode установлен,, теперь можно приступать к сбору логов.
№1. Подключаем девайс к Mac по USB и запускаем XCode.
Если появился запрос «Доверять этому компьютеру?» жмём «Доверять».

№2. В XCode переходим «Window» → «Devices and Simulators».

№3. Нажимаем «Open Console».

Откроется окно, в котором будут отображаться логи iOS.
№4. Для начала вывода логов в консоль нажимаем «Начать».

После этого в консоль начнут «сыпаться» логи.
№5. Для сбора логов только при краше приложения выбираем тип логов «Ошибки и сбои».

№6. Нажимаем на строку поиска, затем на клавиатуре нажимаем стрелку вправо —> и вводим название приложения, чтобы получилось примерно такое.

И нажимаем Enter.
Подведение итогов
Надеюсь моя статья облегчит процесс сбора логов и сделает вашу работу хоть чуточку, но интересней и приятней. Спасибо за внимание и отличного вам настроения.