Чтение и запись логов (LogCat)
Добавлено: 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) (ошибка)
Например:LogCat выведет что-то вроде:
Использование LogCat
________________________________________
Вы можете использовать LogCat изнутри DDMS или вызывать ее из ADB-шелл. Для получения дополнительной информации о том, как использовать в LogCat DDMS см. Using DDMS. Для запуска LogCat через ADB-шелл используйте следующее:Вы можете использовать команду LogCat с компьютера разработки или из удаленного adb shell в эмуляторе/экземпляра устройства. Для просмотра выходных логов в компьютере разработчика, вы используете
и из удаленного adb shell вы используетеВ следующей таблице описаны параметры командной строки 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":Для уменьшения вывода логов до приемлемого уровня, можно ограничить вывод, используя filter expressions. Фильтр выражений позволяет указать системе комбинации тегов-приоритета, которые вам нужны - система подавляет другие сообщений, кроме указанных тегов.
Выражение фильтра имеет следующий формат tag:priority..., где tag указывает интересующий тег и priority указывает на минимальный уровень приоритета рапортовать по этому тегу. Сообщения тега этого уровня или приоритетом выше записываются в журнал. Вы можете указать любое количество tag:priority спецификаций в одном выражении фильтра. Набор спецификаций разделяется пробелами.
Вот пример фильтра, который подавляет все сообщения, за исключением с тегом "ActivityManager", с приоритетом "Info" или выше, и все сообщения, с тегом "MyApp", с приоритетом "Debug" или выше:Последний элементо в этом выражении *: S задает уровень приоритета для всех тегов " silent ", обеспечивая тем самым отображение только сообщений со словами " View " и "MyApp". Использование *:S является отличным способом чтобы убедиться, что вывод логов ограничен фильтрами, которые явно указаны - это позволяет вашим фильтрам служить "белым списком" для вывода логов.
Следующее выражение фильтра показывает все сообщения, с уровнем приоритета "warning" и выше на все теги:Если вы используете LogCat с компьютера разработчика (в противовес запуску его на удаленном adb shell), вы также можете установить фильтр по умолчанию путем экспорта значения переменной среды ANDROID_LOG_TAGS:Обратите внимание, что ANDROID_LOG_TAGS фильтр не экспортируется в эмулятор/устройство, если вы работаете с LogCat из удаленного шелла или используете adb shell logcat.
Контроль формата вывода логов
Лог-сообщения содержат ещё ряд полей метаданных в дополнение к полям тег и приоритет. Вы можете изменить формат вывода логов, чтобы они отображали определенное поле метаданных. Чтобы сделать это, используйте опцию –V и укажите один из поддерживаемых форматов вывода, перечисленных ниже.
• brief - отображает приоритет/тег и PID процесса, который послал сообщение (формат по умолчанию)
• process - только PID
• tag - отображает приоритет/тег
• raw - отображает лог как raw, без других полей метаданных
• time - отображает дату, времени вызова, приоритет/тег, и PID процесса, который послал сообщение
• threadtime - отображает дату, времени вызова, приоритет, тег и PID и TID потока, который послал сообщение
• long - отображение всех полей метаданных и отдельно сообщения с пустыми строками.
При запуске LogCat вы можете указать выходной формат, который вы хотите с помощью опции -v:Вот пример, который показывает, как создавать сообщения в формат вывода thread:Обратите внимание, что можно указать только один выходной формат опцией –v.
Просмотр альтернативных буферов логов
Система регистрации Android хранит несколько кольцевых буферов логов, и не все из логов отправляются в кольцевой буфер по умолчанию. Для отображения дополнительных сообщений журнала, вы можете запустить LogCat команду с опцией –b для просмотра альтернативного кольцевого буфера. Вы можете просмотреть любой из этих альтернативных буферов:
• radio - просмотр буфера, содержащего логи радио/телефонии
• events - просмотр буфера, содержащего сообщения, связанных с событиями
• main - просмотр основного лог-буфера (по умолчанию)
Использование опции -b:Вот пример того, как просмотреть лог буфер, содержащий радио- и телефонные логи:
Просмотр stdout и stderr
________________________________________
По умолчанию, система Android посылает stdout и stderr (System.out и System.err) вывод на /Dev/null. В процессах, которые управляют Dalvik VM, у вас есть система записи копии вывода в лог-файл. В этом случае система записывает сообщения в лог с помощью лог-тегов stdout и stderr с приоритетом I.
Для такого вывода логов вы останавливаете запущенный эмулятор/устройство, а затем используете шелл-команду SetProp, чтобы перенаправить вывод. Вот как это делается:Система сохраняет эту настройку, пока вы не остановите эмулятор/устройство. Для использования настройки по умолчанию на эмуляторе/устройстве вы можете добавить запись в /data/local.prop на устройстве.
Отладка веб-приложений
________________________________________
Если вы разрабатываете веб-приложение для Android, вы можете отлаживать JavaScript с помощью консоли JavaScript APIs, выводя сообщения LogCat. Для получения дополнительной информации см. Debugging Web Apps.
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);
Код: Выделить всё
I / MyActivity (1557): MyClass.getView () - получить номер позиции 1
________________________________________
Вы можете использовать LogCat изнутри DDMS или вызывать ее из ADB-шелл. Для получения дополнительной информации о том, как использовать в LogCat DDMS см. Using DDMS. Для запуска LogCat через ADB-шелл используйте следующее:
Код: Выделить всё
[adb] LogCat [< опции >] ... [<filter-spec>] ...
Код: Выделить всё
$ adb 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...}
Выражение фильтра имеет следующий формат tag:priority..., где tag указывает интересующий тег и priority указывает на минимальный уровень приоритета рапортовать по этому тегу. Сообщения тега этого уровня или приоритетом выше записываются в журнал. Вы можете указать любое количество tag:priority спецификаций в одном выражении фильтра. Набор спецификаций разделяется пробелами.
Вот пример фильтра, который подавляет все сообщения, за исключением с тегом "ActivityManager", с приоритетом "Info" или выше, и все сообщения, с тегом "MyApp", с приоритетом "Debug" или выше:
Код: Выделить всё
adb logcat ActivityManager:I MyApp:D *:S
Следующее выражение фильтра показывает все сообщения, с уровнем приоритета "warning" и выше на все теги:
Код: Выделить всё
adb logcat *:W
Код: Выделить всё
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
Контроль формата вывода логов
Лог-сообщения содержат ещё ряд полей метаданных в дополнение к полям тег и приоритет. Вы можете изменить формат вывода логов, чтобы они отображали определенное поле метаданных. Чтобы сделать это, используйте опцию –V и укажите один из поддерживаемых форматов вывода, перечисленных ниже.
• brief - отображает приоритет/тег и PID процесса, который послал сообщение (формат по умолчанию)
• process - только PID
• tag - отображает приоритет/тег
• raw - отображает лог как raw, без других полей метаданных
• time - отображает дату, времени вызова, приоритет/тег, и PID процесса, который послал сообщение
• threadtime - отображает дату, времени вызова, приоритет, тег и PID и TID потока, который послал сообщение
• long - отображение всех полей метаданных и отдельно сообщения с пустыми строками.
При запуске LogCat вы можете указать выходной формат, который вы хотите с помощью опции -v:
Код: Выделить всё
[adb] logcat [- v <format>]
Код: Выделить всё
adb logcat - v thread
Просмотр альтернативных буферов логов
Система регистрации Android хранит несколько кольцевых буферов логов, и не все из логов отправляются в кольцевой буфер по умолчанию. Для отображения дополнительных сообщений журнала, вы можете запустить LogCat команду с опцией –b для просмотра альтернативного кольцевого буфера. Вы можете просмотреть любой из этих альтернативных буферов:
• radio - просмотр буфера, содержащего логи радио/телефонии
• events - просмотр буфера, содержащего сообщения, связанных с событиями
• main - просмотр основного лог-буфера (по умолчанию)
Использование опции -b:
Код: Выделить всё
[abp] logcat [-b <buffer>]
Код: Выделить всё
abp logcat -b radio
________________________________________
По умолчанию, система 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
Отладка веб-приложений
________________________________________
Если вы разрабатываете веб-приложение для Android, вы можете отлаживать JavaScript с помощью консоли JavaScript APIs, выводя сообщения LogCat. Для получения дополнительной информации см. Debugging Web Apps.