Чтение и запись логов (LogCat)

Ответить
=bor=
Сообщения: 267
Зарегистрирован: 21 мар 2013, 12:26

Чтение и запись логов (LogCat)

Сообщение =bor= » 11 сен 2013, 22:52

Чтение и запись логов
Log class
Стартуем LogCat
Фильтрация вывода логов
Управление форматом вывода логов
Просмотр альтернативных буферов вывода
Просмотр stdout и stderr
Отладка веб-страниц

Система регистрации Android обеспечивает механизм для сбора и просмотра вывода отладочной информации. Logcat делает дамп логов системных сообщений, которые включают в себя такие вещи, как трассировки стека, когда эмулятор выдает сообщение об ошибке и сообщения, которые вы написали из вашего приложения, используя класс Log. Вы можете запустить LogCat через ADB или DDMS, которые позволяет читать сообщения в реальном времени.

Класс Log
________________________________________
Log – это логирующий класс, который можно использовать в коде для вывода сообщения в LogCat. Общие методы ведения журналов включают в себя:
V (String, String) (подробно)
D (String, String) (отладка)
I (String, String) (информация)
W (String, String) (предупреждение)
е (String, String) (ошибка)

Например:

Код: Выделить всё

Log.i ("MyActivity", "MyClass.getView() - получить номер позиции" + position);
LogCat выведет что-то вроде:

Код: Выделить всё

I / MyActivity (1557): MyClass.getView () - получить номер позиции 1
Использование LogCat
________________________________________
Вы можете использовать LogCat изнутри DDMS или вызывать ее из ADB-шелл. Для получения дополнительной информации о том, как использовать в LogCat DDMS см. Using DDMS. Для запуска LogCat через ADB-шелл используйте следующее:

Код: Выделить всё

[adb] LogCat [< опции >]  ...  [<filter-spec>]  ...
Вы можете использовать команду LogCat с компьютера разработки или из удаленного adb shell в эмуляторе/экземпляра устройства. Для просмотра выходных логов в компьютере разработчика, вы используете

Код: Выделить всё

$ adb logcat
и из удаленного adb shell вы используете

Код: Выделить всё

# logcat
В следующей таблице описаны параметры командной строки LogCat :
-c Очистка журнала и выход
-d Дамп лога на экран и выход
-f <filename> Запись логов в <filename>. По умолчанию stdout.
-g Вывод размер указанного буфера журнала и выход
-n <count> Устанавливает максимальное количество обновления логов из <count> . Значение по умолчанию 4. Требует -R опцию
-r <kbytes> Обновление лог-файла каждые <kbytes> продукции. Значение по умолчанию равно 16. Требует F- опцию
-s Задает спецификацию фильтров по умолчанию в беззвучный режим
-v <format> Устанавливает формат вывода сообщений логов. По умолчанию brief-формат. Список поддерживаемых форматов см. в разделе Controlling Log Output Format

Фильтрация вывода логов
Каждое сообщение лога Android имеет тег и приоритет, связанные с ним.
• Тег сообщения лога – короткая строка, указывающую на компонент системы, из которой сообщение исходит (например, " View " для представления системы).
• Приоритет - один из следующих символов, в порядке приоритета от низшего к высшему:
o V - Verbose (самый низкий приоритет)
o D - Debug
o I - Info
o W - Warning
o E - Error
o F - Fatal
o S - Silent (самый высокий приоритет, на котором ничего даже не выводится)

Вы можете получить список тегов, используемых в системе, вместе с приоритетами, запустив LogCat и наблюдая первые два столбца каждого сообщения, <priority> / <tag> .
Вот пример из LogCat-вывода, который показывает, что сообщение относится к приоритету уровня "I" и тегу "ActivityManager":

Код: Выделить всё

I/ActivityManager (585): Starting activity: Intent { action=Android.intent.action...}
Для уменьшения вывода логов до приемлемого уровня, можно ограничить вывод, используя filter expressions. Фильтр выражений позволяет указать системе комбинации тегов-приоритета, которые вам нужны - система подавляет другие сообщений, кроме указанных тегов.
Выражение фильтра имеет следующий формат tag:priority..., где tag указывает интересующий тег и priority указывает на минимальный уровень приоритета рапортовать по этому тегу. Сообщения тега этого уровня или приоритетом выше записываются в журнал. Вы можете указать любое количество tag:priority спецификаций в одном выражении фильтра. Набор спецификаций разделяется пробелами.
Вот пример фильтра, который подавляет все сообщения, за исключением с тегом "ActivityManager", с приоритетом "Info" или выше, и все сообщения, с тегом "MyApp", с приоритетом "Debug" или выше:

Код: Выделить всё

adb logcat ActivityManager:I MyApp:D *:S
Последний элементо в этом выражении *: S задает уровень приоритета для всех тегов " silent ", обеспечивая тем самым отображение только сообщений со словами " View " и "MyApp". Использование *:S является отличным способом чтобы убедиться, что вывод логов ограничен фильтрами, которые явно указаны - это позволяет вашим фильтрам служить "белым списком" для вывода логов.
Следующее выражение фильтра показывает все сообщения, с уровнем приоритета "warning" и выше на все теги:

Код: Выделить всё

adb logcat *:W
Если вы используете LogCat с компьютера разработчика (в противовес запуску его на удаленном adb shell), вы также можете установить фильтр по умолчанию путем экспорта значения переменной среды ANDROID_LOG_TAGS:

Код: Выделить всё

export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
Обратите внимание, что ANDROID_LOG_TAGS фильтр не экспортируется в эмулятор/устройство, если вы работаете с LogCat из удаленного шелла или используете adb shell logcat.

Контроль формата вывода логов
Лог-сообщения содержат ещё ряд полей метаданных в дополнение к полям тег и приоритет. Вы можете изменить формат вывода логов, чтобы они отображали определенное поле метаданных. Чтобы сделать это, используйте опцию –V и укажите один из поддерживаемых форматов вывода, перечисленных ниже.
• brief - отображает приоритет/тег и PID процесса, который послал сообщение (формат по умолчанию)
• process - только PID
• tag - отображает приоритет/тег
• raw - отображает лог как raw, без других полей метаданных
• time - отображает дату, времени вызова, приоритет/тег, и PID процесса, который послал сообщение
• threadtime - отображает дату, времени вызова, приоритет, тег и PID и TID потока, который послал сообщение
• long - отображение всех полей метаданных и отдельно сообщения с пустыми строками.

При запуске LogCat вы можете указать выходной формат, который вы хотите с помощью опции -v:

Код: Выделить всё

[adb] logcat [- v <format>]
Вот пример, который показывает, как создавать сообщения в формат вывода thread:

Код: Выделить всё

adb logcat - v thread 
Обратите внимание, что можно указать только один выходной формат опцией –v.

Просмотр альтернативных буферов логов
Система регистрации Android хранит несколько кольцевых буферов логов, и не все из логов отправляются в кольцевой буфер по умолчанию. Для отображения дополнительных сообщений журнала, вы можете запустить LogCat команду с опцией –b для просмотра альтернативного кольцевого буфера. Вы можете просмотреть любой из этих альтернативных буферов:
• radio - просмотр буфера, содержащего логи радио/телефонии
• events - просмотр буфера, содержащего сообщения, связанных с событиями
• main - просмотр основного лог-буфера (по умолчанию)

Использование опции -b:

Код: Выделить всё

[abp] logcat [-b <buffer>]
Вот пример того, как просмотреть лог буфер, содержащий радио- и телефонные логи:

Код: Выделить всё

abp logcat -b radio
Просмотр stdout и stderr
________________________________________
По умолчанию, система Android посылает stdout и stderr (System.out и System.err) вывод на /Dev/null. В процессах, которые управляют Dalvik VM, у вас есть система записи копии вывода в лог-файл. В этом случае система записывает сообщения в лог с помощью лог-тегов stdout и stderr с приоритетом I.
Для такого вывода логов вы останавливаете запущенный эмулятор/устройство, а затем используете шелл-команду SetProp, чтобы перенаправить вывод. Вот как это делается:

Код: Выделить всё

$ adb shell stop
$ adb shell setprop log.redirect-stdio true
$ adb shell start
Система сохраняет эту настройку, пока вы не остановите эмулятор/устройство. Для использования настройки по умолчанию на эмуляторе/устройстве вы можете добавить запись в /data/local.prop на устройстве.

Отладка веб-приложений
________________________________________
Если вы разрабатываете веб-приложение для Android, вы можете отлаживать JavaScript с помощью консоли JavaScript APIs, выводя сообщения LogCat. Для получения дополнительной информации см. Debugging Web Apps.

Ответить