Как посмотреть журналы с помощью Logcat

Окно Logcat в Android Studio помогает отлаживать приложение, показывая журналы с устройства в реальном времени. Например, это могут быть сообщения, добавленные в приложение с помощью класса Log, сообщения от сервисов, работающих на Android, или системные сообщения, например о сборке мусора. Когда приложение выдает исключение, Logcat показывает сообщение, а затем связанную трассировку стека со ссылками на строку кода.

Начало работы с окном Logcat

Чтобы посмотреть сообщения в журнале для приложения, выполните следующие действия:

  1. В Android Studio соберите и запустите приложение на физическом устройстве или в эмуляторе.
  2. В строке меню выберите View (Вид) > Tool Windows (Окна инструментов) > Logcat.

По умолчанию Logcat прокручивается до конца. Если нажать на окно Logcat или прокрутить его вверх с помощью колесика мыши, эта функция отключится. Чтобы снова включить ее, нажмите Прокрутить до конца Значок "Прокрутить до конца" на панели инструментов. Вы также можете использовать панель инструментов, чтобы очистить, приостановить или перезапустить Logcat.

Интерфейс окна Logcat

Рисунок 1. Logcat форматирует журналы, чтобы упростить поиск полезной информации, например тегов и сообщений, и определить различные типы журналов, например предупреждения и ошибки.

Как читать журналы

Каждый журнал содержит дату, временную метку, идентификатор процесса и потока, тег, название пакета, приоритет и сообщение. Разные теги имеют уникальный цвет, который помогает определить тип журнала. Каждой записи в журнале присваивается приоритет: FATAL, ERROR, WARNING, INFO, DEBUG или VERBOSE.

Например, у следующего сообщения в журнале приоритет DEBUG и тег ProfileInstaller:

2022-12-29 04:00:18.823 30249-30321 ProfileInstaller        com.google.samples.apps.sunflower    D  Installing profile for com.google.samples.apps.sunflower

Как настроить представление журнала

В стандартном представлении журнала отображаются дата, время, идентификатор процесса и потока, тег, название пакета, приоритет и сообщение, связанное с каждым журналом. По умолчанию строки сообщений не переносятся в представлении журнала, но вы можете использовать параметр Мягкий перенос Значок "Мягкий перенос" на панели инструментов Logcat.

Вы можете переключиться на компактный вид, в котором по умолчанию отображается меньше информации. Для этого нажмите Configure Logcat Formatting Options (Настроить параметры форматирования Logcat) на панели инструментов Logcat.

Чтобы настроить объем отображаемой информации, нажмите Изменить представления и выберите, что вы хотите видеть: временные метки, теги, идентификаторы процессов или названия пакетов.

Как изменить цветовую схему

Чтобы изменить цветовую схему, выберите Android Studio > Settings (Настройки) > Editor (Редактор) > Color Scheme (Цветовая схема). Чтобы изменить цветовую схему журнала, выберите Android Logcat. Чтобы изменить цветовую схему фильтра, выберите Logcat Filter (Фильтр Logcat).

Дополнительные настройки

Чтобы задать дополнительные настройки, выберите Android Studio > Settings (Настройки) > Tools (Инструменты) > Logcat. Здесь вы можете выбрать размер циклического буфера Logcat, фильтр по умолчанию для новых окон Logcat и указать, хотите ли вы добавлять фильтры из истории в автозаполнение.

Как использовать Logcat в нескольких окнах

Вкладки позволяют легко переключаться между устройствами и запросами. Чтобы создать несколько вкладок Logcat, нажмите Новая вкладка Значок новой вкладки. Нажав на вкладку правой кнопкой мыши, вы можете переименовать или переместить ее.

Кроме того, вы можете разделить представление на вкладке, чтобы упростить сравнение двух наборов журналов. Чтобы разделить панель, нажмите правой кнопкой мыши в области просмотра журнала или выберите Разделить панели на панели инструментов, а затем нажмите Разделить вправо или Разделить вниз. Чтобы закрыть разделение, нажмите правой кнопкой мыши и выберите Закрыть. Для каждого разделения можно задать подключение устройства, параметры просмотра и запрос.

Несколько окон Logcat Рисунок 2. Разделенные окна Logcat в Android Studio.

На панели инструментов Logcat можно прокрутить журнал до конца или нажать на определенную строку, чтобы она оставалась видимой.

В Android Studio можно генерировать поисковые запросы с парами "ключ-значение" прямо из основного поля запроса. Эта система запросов обеспечивает точность того, что вы хотите запросить, а также исключает журналы на основе пар "ключ-значение". Вы можете использовать регулярные выражения, но это не обязательно. Чтобы посмотреть подсказки, нажмите Ctrl + Space в поле запроса.

Список подсказок в поле запроса Рисунок 3. Нажмите Ctrl + Space в поле запроса, чтобы увидеть список рекомендуемых запросов.

Ниже приведены примеры ключей, которые можно использовать в запросе.

  • tag: сопоставление с полем tag записи в журнале.
  • package – сопоставление с названием пакета приложения, которое ведет журнал.
  • process – сопоставление с названием процесса приложения, которое ведет журнал.
  • message: сопоставление с частью сообщения в записи в журнале.
  • level – соответствует указанному или более высокому уровню серьезности, например DEBUG.
  • age – совпадение, если временная метка записи недавняя. Значения указываются в виде числа, за которым следует буква, обозначающая единицу времени: s – секунды, m – минуты, h – часы, d – дни. Например, age: 5m фильтрует только сообщения, зарегистрированные за последние 5 минут.

Отрицание и регулярные выражения

Отрицание и регулярные выражения поддерживаются в следующих полях: tag, package, message и line.

Отрицание выражается добавлением - перед названием поля. Например, -tag:MyTag соответствует записям в журнале, в которых tag не содержит строку MyTag.

Чтобы указать, что значение поля должно соответствовать регулярному выражению, добавьте к названию поля ~. например tag~:My.*Tag.

Отрицание и модификаторы регулярных выражений можно комбинировать. Пример: -tag~:My.*Tag.

Логические операторы и скобки

Язык запросов поддерживает операторы AND и OR, которые обозначаются как & и |, а также круглые скобки. Пример:

(tag:foo | level:ERROR) & package:mine

Обратите внимание, что операторы выполняются в стандартном порядке, поэтому выражение

tag:foo | level:ERROR & package:mine

Оценивается как:

tag:foo | (level:ERROR & package:mine)

Неявные логические операторы

Если логические операторы не применяются, язык запросов автоматически оценивает несколько неотрицательных условий фильтра key-value с одним и тем же ключом как OR, а все остальное – как AND.

Пример:

tag:foo tag:bar package:myapp

Оценивается как:

(tag:foo | tag:bar) & package:myapp

Но:

tag:foo -tag:bar package:myapp

Оценивается как:

tag:foo & -tag:bar & package:myapp

Если несколько поисковых запросов разделены пробелом без логического оператора, они обрабатываются как оператор AND с низким приоритетом. Например, запрос foo bar tag:bar1 | tag:bar2 эквивалентен запросу 'foo bar' & (tag: bar1 | tag: bar2).

Специальные запросы

package:mine

Ключ пакета поддерживает специальное значение mine. Это специальное значение соответствует любым названиям пакетов, которые содержатся в открытом проекте.

level

Запрос level сопоставляется с уровнем записи в журнале Logcat, где уровень записи больше или равен уровню запроса.

Например, level:INFO соответствует любой записи в журнале с уровнем INFO, WARN, ERROR или ASSERT. Регистр не учитывается. Допустимые значения: VERBOSE, DEBUG, INFO, WARN, ERROR и ASSERT.

age

Запрос age сопоставляет записи на основе их временной метки и имеет формат age:<number><unit>, где:

  • <number> – целое число.
  • <unit> – это s, m, h или d (секунды, минуты, часы или дни).

В списке ниже приведены запросы age, которые соответствуют сообщениям в журнале с временной меткой в диапазоне, описанном значением. Например, запрос age:5m соответствует записям с временной меткой не ранее 5 минут назад.

age:30s
age:5m
age:3h
age:1d

Обратите внимание, что временная метка сравнивается с временной меткой хоста, а не подключенного устройства. Если время на устройстве установлено неправильно, запрос может работать некорректно.

is

Вы можете использовать ключ is следующим образом:

  • is:crash соответствует записям в журнале, которые представляют сбой приложения (нативного или Java).
  • is:stacktrace соответствует записям в журнале, которые похожи на трассировку стека Java, независимо от уровня журнала.

name

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

Как посмотреть историю запросов

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

Интерфейс для добавления запроса в избранное

Рисунок 4. Чтобы добавить запрос в избранное, нажмите на звездочку рядом с ним.

Отслеживание журналов при сбоях и перезапусках приложения

Когда Logcat обнаруживает, что процесс приложения остановлен и перезапущен, он выводит сообщение, например PROCESS ENDED и PROCESS STARTED. При перезапуске Logcat сохраняются настройки сеанса, такие как разделение вкладок, фильтры и параметры просмотра, поэтому вы можете легко продолжить сеанс.

Окно Logcat для сбоев приложений

Рисунок 5. Когда процесс приложения перезапустится, в Logcat появится сообщение о том, что процесс завершился, а затем начался.