- Logcat
- Быстрое отключение журналирования
- LogCat на устройстве
- Отладка приложения, Logcat
- Пример протоколирования
- Панель Logcat в Studio
- Фильтр сообщений
- Листинг активности
- Формат сообщения
- Контроль протоколирования, BuildConfig
- How to Fix “Android studio logcat nothing to show” in Android Studio?
- Solution 1: Restarting Logcat
- Solution 2: Change Log Level
- Solution 3: Plug Unplug
- Solution 4: Restart Android Studio
- Solution 5: Select – Show only Selected application
- Solution 6: Invalidate Caches
- Working with Logcat
- How to open Logcat?
- Logcat levels
- Making a custom level in Logcat
- Customizing log messages font colors and style
- How to clear logs
Logcat
В Android SDK входит набор инструментов, предназначенных для отладки. Самый важный инструмент при отладке — это LogCat (очень красивое название, которое можно перевести как Логичный Кот). Он отображает сообщения логов (журнал логов), рассылаемые при помощи различных методов.
Рассмотрим на примере. Очень часто программисту нужно вывести куда-то промежуточные результаты, чтобы понять, почему программа не работает. Особо хитрые временно размещают на экране текстовую метку и выводят туда сообщение при помощи метода textView.setText(«Здесь был Васька»). Но есть способ лучше. В Android есть специальный класс android.util.Log для подобных случаев.
Класс android.util.Log позволяет разбивать сообщения по категориям в зависимости от важности. Для разбивки по категориям используются специальные методы, которые легко запомнить по первым буквам, указывающие на категорию:
- Log.e() — ошибки (error)
- Log.w() — предупреждения (warning)
- Log.i() — информация (info)
- Log.d() — отладка (degub)
- Log.v() — подробности (verbose)
- Log.wtf() — очень серьёзная ошибка! (What a Terrible Failure!, работает начиная с Android 2.2)
- Log.meow() — когда жрать дадут? (MEOW!) Недокументированный метод, используйте на свой страх и риск. Работает не на всех устройствах
В первом параметре метода используется строка, называемая тегом. Обычно принято объявлять глобальную статическую строковую переменную TAG в начале кода:
Некоторые в сложных проектах используют следующий вариант, чтобы понимать, в каком классе происходит вызов:
Далее уже в любом месте вашей программы вы вызываете нужный метод журналирования с этим тегом:
Также используется в исключениях:
Пользователи не видят этот журнал. Но, вы, как разработчик, можете увидеть его через программу LogCat, доступный в Android Studio.
Полный вид сообщения выглядит следующим образом.
03-09 20:44:14.460 3851-3879 / ru.alexanderklimov.cat I/OpenGLRenderer : Initialized EGL, version 1.4
- 03-09 20:44:14.460 Date/Time
- 3851-3879 Process & Thread IDs
- ru.alexanderklimov.cat Package name
- I/OpenGLRenderer Tag
- Initialized EGL, version 1.4 Message
Подобные длинные сообщения не всегда удобны для чтения. Вы можете убрать ненужные элементы. Для этого выберите значок LogCat Header в виде шестерёнки и уберите флажки у опций.
В LogCat вы можете отфильтровать сообщение по заданному типу, чтобы видеть на экране только свои сообщения. Для этого выберите нужный тип тега из выпадающего списка Verbose.
Типы сообщений можно раскрасить разными цветами через настройки File | Settings | Editor | Colors Scheme | Android Logcat.
Для отслеживания сообщений с заданным текстом введите в поле поиска нужную строку и нажмите Enter.
Также активно используйте варианты из других выпадающих списков. Например, выбирайте свой пакет из второй колонки, а в последней выбирайте Show only selected application. Для более точной настройки используйте Edit Fiter Configuration.
По умолчанию, окно LogCat выводится в нижней части студии. При желании, можно выбрать другие варианты через значок настроек окна.
LogCat также можно запустить из командной строки:
Параметры командной строки смотрите в документации.
Быстрое отключение журналирования
Настоятельно рекомендуется удалять все вызовы LogCat в готовых приложениях. Если проект очень большой и вызовы журналирования разбросаны по всем местам кода, то ручное удаление (или комментирование) становится утомительным занятием. Многие разработчики используют следующую хитрость — создают обёртку вокруг вызова методов LogCat.
Теперь остаётся только присвоить нужное значение переменной isDebug перед созданием готового apk-файла для распространения.
Способ устарел. В 17-й версии Android Build Tools появился класс BuildConfig, содержащий статическое поле DEBUG. Можно проверить следующим образом:
Способ для продвинутых — например, требуется релиз с выводом в лог, или наоборот — debug с выключенным выводом. В этом случае можно создать собственный параметр и добавить его в секцию buildType gradle-файла:
В этом случае конфигурация releaseWithLog будет являться релизной сборкой с ведением логов. Естественно, в коде слегка поменяется проверка:
LogCat на устройстве
Попался в сети пример для просмотра сообщений LogCat на устройстве. С примером не разбирался, оставлю здесь на память.
Источник
Отладка приложения, Logcat
Для отладки приложений могут быть использованы всплывающие сообщения Toast. Однако это не эффективно. Android SDK включает средство просмотра отладочных сообщений Logcat. Оно не представляет сложности в освоении, поэтому широко используется программистами. Logcat позволяет просматривать отладочные сообщения не только разрабатываемого приложения, но и протоколируемые системой сообщения. Так, например, Garbage Collection периодически протоколирует свои сообщения о выполнении определенных действий («сборке мусора»), которые можно просматривать с помощью Logcat.
Для протоколирования сообщений необходимо использовать класс android.util.Log, позволяющий объединять сообщения по категориям. В следующем списке приведены методы класса Log, отсортированные по приоритету (важности) от высшего к низшему :
- Log.e(String, String) — ошибка (error)
- Log.w(String, String) — предупреждение (warning)
- Log.i(String, String) — информация (info)
- Log.d(String, String) — отладка (debug)
- Log.v(String, String) — подробно (verbose)
Пример протоколирования
В качестве первого параметра методов Log используется текстовый тег (в примере переменная TAG). Если имеется необходимость в качестве тега сообщения определить наименование класса, то можно использовать следующее определение :
Панель Logcat в Studio
Logcat в среде разработки Android Studio располагается на отдельной вкладке, интерфейс которой представлен на следующем скриншоте. Слева вертикально располагаются кнопки управления сообщениями : очистка, перемещение по списку и т.д. Интерес представляет расположенный сверху справа компонент с выпадающим списком/меню. Если выбрать представленный на скриншоте пункт «Edit Filter Configuration», то можно определить фильтр сообщений, окно которого изображено на следующем скриншоте.
Фильтр сообщений
Logcat позволяет создать набор из нескольких фильтров. Достаточно только для каждого фильтра определить его наименование «Filter Name» и тег сообщений «Log Tag». Значение тега сообщения регистрируется классом android.util.Log.
Создадим простой пример протоколирования сообщений. В примере переопределим методы активности; в каждом методе будем протоколировать соответствующее сообщение.
Листинг активности
После старта приложения переходим на вкладку Locat и просматриваем список регистрируемых сообщений. Чтобы исключить сообщений системы установим фильтр State (справа, сверху). После этого можно менять ориентацию устройства (portrait => landscape => portrait) и контролировать список сообщений.
Протоколируемые сообщения можно просматривать не только с помощью Logcat. Они также попадают и на вкладку Run (см. следующий скриншот), но только с ме́ньшей функциональностью (отсутствует время регистрации, нельзя фильтровать и т.д.).
Формат сообщения
Logcat представляет сообщения в определенном формате : «date time PID-TID/package priority/tag: message». Поле даты (date) имеет формат MM-DD (месяц–день). Формат времени (time) HH24:MI:SS.SSS (часы:минуты:секунды.мс) включает милисекунды. Значения идентификаторов процесса PID и потока TID могут совпадать, если существует только один поток. Пример сообщения : 02-08 08:43:51.557 11608-43308/com.android.test.p08activity D/ACTIVITY_STATE: onStop.
Английский вариант полного описания Logcat.
Контроль протоколирования, BuildConfig
На этапе разработки приложения вывод отладочных сообщений, конечно же, полезен и необходим. Но что делать с этими сообщеними в готовом релизе? Если проект включает несколько модулей с различными тегами отладочных сообщений, то подготовка очередного релиза потребует определенных усилий с ручным удалением отладочных сообщений и комментариев. Иногда программисты используют условные выражения для вывода сообщений/комментариев. Например :
В этом примере сообщения будут протоколироваться в отдельной процедуре WriteLog только если IS_RELEASE=false. Одним движением (IS_RELEASE=true) можно блокировать протоколирование сообщений перед созданием готового apk-файла.
Начиная с 17-ой версии Android Build Tools в приложении автоматически формируется класс BuildConfig, содержащий статическое поле DEBUG с признаком отладочной сборки. При использовании данного класса перед протоколированием необходимо выполнить следующую проверку :
Объект BuildConfig можно расширить и включить в него свой «тег». Для этого необходимо внести соответствующие изменения в секцию buildType сборочного build.gradle файла проекта. Вот как может выглядеть секция buildType для тега ACTIVITY_STATE :
Конфигурация releaseWithLog будет релизной сборкой с протоколированием. Соответственно в коде приложения необходимо будет выполнять следующую проверку :
Источник
How to Fix “Android studio logcat nothing to show” in Android Studio?
Logcat Window is the place where various messages can be printed when an application runs. Suppose, you are running your application and the program crashes, unfortunately. Then, Logcat Window is going to help you to debug the output by collecting and viewing all the messages that your emulator throws. So, this is a very useful component for the app development because this Logcat dumps a lot of system messages and these messages are actually thrown by the emulator. In Android Studio one of the most used tools is Logcat. Logcat window in Android Studio is used to display real-time system messages and messages that are added in the Log class of the app. To open Logcat Click View > Tool Windows > Logcat (Alt + 6 or from the toolbar window). Sometimes logcat shows nothing and it’s completely blank. This happens often and there can be different reasons. Below are some quick solutions that might work.
Solution 1: Restarting Logcat
You need to press Alt + 6 twice to restart the Logcat. Restarting logcat often helps when it becomes irresponsive. Or you may click on this icon.
Solution 2: Change Log Level
Changing between different log levels like verbose to error or vice versa helps in displaying the logs back.
Solution 3: Plug Unplug
In case you are using the external android device to run the app then you might want to unplug and again plug the device.
Solution 4: Restart Android Studio
By restarting Android Studio, you can resolve this issue.
Solution 5: Select – Show only Selected application
In android studio open the android monitor window from the bottom and from the spinner option menu on the right side select Show only selected application.
Solution 6: Invalidate Caches
Go to the File option > click on “INVALIDATE CACHES/RESTART” then a dialog box will pop up, Select the “INVALIDATE CACHES/RESTART” button. This will automatically restart and build the index of android studio.
Источник
Working with Logcat
Logcat is an important part of everyday development. If you see one of those «Force Close» or «Has Stopped» dialogs, the first thing you will want to do is examine the Java stack trace that is associated with this crash. These are logged to a facility known as Logcat, its purpose is to display all logs coming from your device. It displays logs from an emulator or a real device connected.
We can see the following messages in Logcat:
- System.out.println
- exceptions
- android.util.Log
To properly log messages from your application you should use the android.util.Log class. This class defines the familiar informational, warning, and error methods that you can filter in the Logcat pane to see just what you want to see. Every log message has a tag associated with it, which is used to identify the source of a log message. It usually identifies the class or activity where the log call occurs.
Here are some sample Log commands categorized by severity:
It’s best to use the appropriate log level for the message you want to log. It is recommend to define a unique debug tag string for each class so that you can easily track down where a log message originated. You can use this tag to filter the logging data and find only the messages you are interested in.
The recommended way to define Tag string:
How to open Logcat?
By keyboard shortcut alt + 6
By clicking the main menu bar View > Tool Windows > Logcat .
By clicking the Logcat Tool Button from the bottom of Android Studio.
The following Logcat pane will appear on bottom of Android Studio.
Following is the description of some important options highlighted in above image:
Device selection menu
App selection menu
Filter messages based on log level, where messages for your chosen level or higher will be displayed
Use the search field to filter items based on a search string
When this menu is set to Show only selected application, only those messages relating to the app selected in the menu marked as 2 will be displayed in the Logcat panel. Choosing No Filter will display all the messages generated by the device or emulator.
Logcat levels
To get the most out of your application, Logcat has several levels of log messages, so Android Studio provides multiple ways of filtering the logcat output. One method is to use the Log Level dropdown menu, to filter based on log level, open this dropdown and select anything other than the default Verbose option.
Verbose: Display all log messages
Debug: Displays log messages that are useful during development
Info: Displays expected log messages for regular usage
Warn: Displays possible issues that are not yet errors
Error: Displays issues that have caused errors
Assert: Displays issues that should never happen
Making a custom level in Logcat
Every Android log message includes a tag. You can use these tags with filters defined in Logcat. To open Logcat pane, click «Show only selected application» drop-down menu from the top right and select «Edit Filter Configuration». This opens a «Create New Logcat Filter» dialog:
Provide the following information to create a new filter:
Filter name: give a unique name.
Log Tag: Every log message has a tag associated with it, which indicates the system component the message originated from. If you want to see messages that originate from a certain system component only, you can enter that component’s tag here. It is used to identify the source of a log message. It usually identifies the class or activity where the log call occurs.
Log Message: If you only want to see messages that contain certain elements or character strings, specify them in the Log Message field.
Package Name: If you want your filter to display messages that relate to a certain package only, enter this package name here.
PID: If you only want to see messages that refer to a specific process, enter that process ID here.
Customizing log messages font colors and style
Open Android Studio Settings from the main menu File > Settings or by pressing keyboard shortcut Ctrl + Alt + S . In the search field, enter Logcat. Editor > Color & Fonts > Android Logcat preferences appears:
To change these options, you must save a copy of the current Theme by clicking the Save as button and enter some suitable name. Now select each log level one by one and apply your own font and background color, make log message bolt or italic and etc.
Note: before starting the customization, uncheck the Use inherited attributes box, otherwise you won’t be able to edit these options.
Select a log level from the list (e.g. Assert)
If you want to change font color, check Foreground and click its color box to customize the font color
To change the background color of font, check Background and click its color box to customize the background color
Check Error stripe mark to display a mark at the end of message and click its color box to customize the mark color
Check Effects then select the effect from the drop down menu (e.g. underline, strikeout, or dotted line etc) and click its color box to customize the mark color.
To apply changes, click on Apply and then OK.
How to clear logs
The «trash can» icon atop the tool strip on the left is the «clear log» tool.
Clicking it will appear to clear Logcat. It definitely clears your LogCat view, so you will only see messages logged after you cleared it, though, that this does not actually clear the logs from the device or emulator.
Note: Log has impact on performance. Excessive logging impacts device and application performance. At a minimum, debug and verbose logging should be used only for development purposes and removed prior to application publication.
Источник