Фильтровать LogCat, чтобы получать только сообщения из Моего приложения в Android?

Я заметил, что когда я использую Logcat с Eclipse с ADT для Android, я получаю сообщения и от многих других приложений. Есть ли способ отфильтровать это и показать только сообщения из моего собственного приложения только.

39 ответов

Решение

Имена пакетов гарантированно уникальны, поэтому вы можете использовать Log Функция с тегом в качестве имени вашего пакета, а затем фильтр по имени пакета:

ПРИМЕЧАНИЕ. Начиная с Build Tools 21.0.3 это больше не будет работать, так как TAGS ограничен 23 символами или меньше.

Log.<log level>("<your package name>", "message");

adb -d logcat <your package name>:<log level> *:S

-d обозначает фактическое устройство и -e обозначает эмулятор. Если запущено более 1 эмулятора, вы можете использовать -s emulator-<emulator number> (например, -s emulator-5558)

Пример: adb -d logcat com.example.example:I *:S

Или если вы используете System.out.print отправлять сообщения в журнал вы можете использовать adb -d logcat System.out:I *:S показывать только звонки на System.out.

Вы можете найти все уровни журнала и дополнительную информацию здесь: https://developer.android.com/studio/command-line/logcat.html

http://developer.android.com/reference/android/util/Log.html

РЕДАКТИРОВАТЬ: Похоже, я немного подпрыгнул пистолет и только что понял, что вы спрашивали о logcat в Eclipse. То, что я написал выше, для использования logcat через adb из командной строки. Я не уверен, что те же фильтры переносятся в Eclipse.

Linux и OS X

Используйте ps/grep/cut, чтобы получить PID, затем grep для записей logcat с этим PID. Вот команда, которую я использую:

adb logcat | grep -F "`adb shell ps | grep com.example.package | cut -c10-15`"

(Вы можете усовершенствовать регулярное выражение, чтобы избежать теоретической проблемы несвязанных строк журнала, содержащих одинаковое число, но для меня это никогда не было проблемой)

Это также работает при сопоставлении нескольких процессов.

Windows

На Windows вы можете сделать:

adb logcat | findstr com.example.package

Начиная с Android 7.0, в logcat есть опция --pid filter и доступна команда pidof, замените com.example.app на имя вашего пакета.
(терминал Ubuntu / С Android 7.0)

adb logcat --pid=`adb shell pidof -s com.example.app`

или же

adb logcat --pid=$(adb shell pidof -s com.example.app)

Для получения дополнительной информации о команде pidof:
/questions/10976746/uznat-identifikator-zapuschennogo-protsessa-po-imeni-paketa/10976763#10976763

Добавить фильтр

Добавить фильтр

Укажите имена

Выберите свой фильтр.

Это работает для меня с отладкой USB:

  1. Подключите устройство и используйте:

    adb shell

  2. Просто используйте logcat:

    logcat | grep com.youapp.packagename

Для меня это работает в Mac Terminal
Добрался до папки, где у вас есть adb затем введите команду ниже в терминале

./adb logcat MyTAG:V AndroidRuntime:E *:S

Здесь он будет фильтровать все журналы MyTAG а также AndroidRuntime

      adb logcat -e "appname" 

Это прекрасно работает при фильтрации строк только для одного приложения.

Обновление 17 мая

Прошло несколько лет, и все изменилось. И Eclipse больше официально не поддерживается. Итак, вот еще два современных подхода:

1. Android Studio

в Android monitor панель инструментов, вы можете фильтровать debuggable process, Обычно, когда вы разрабатываете приложение, это отлаживаемый процесс. Время от времени у меня возникают проблемы с этим, и я делаю следующее:

  1. Tools -> Android -> Enable ADB Integration,
    Если он уже был включен, выключите его, а затем снова включите

  2. Отключите и снова подключите ваше мобильное устройство.

Есть также варианты фильтрации через регулярные выражения и уровень отладки.

2. logcat-color

Это хорошая оболочка Python поверх adb logcat если вы хотите использовать терминальное решение. Хорошо, что вы можете сохранить несколько конфигураций и просто использовать их повторно. Фильтрация по tags довольно надежно Вы также можете фильтровать по package просматривать журналы только одного или нескольких приложений, но вы начинаете logcat-color прямо перед запуском вашего приложения.

Старый ответ:

Кажется, я не могу комментировать предыдущие ответы, поэтому я опубликую новый. Это комментарий к ответу Тома Малкахи, который показывает, как должна измениться команда, чтобы она работала на большинстве устройств, поскольку adb shell ps Столбец PID является переменной.

ПРИМЕЧАНИЕ. Приведенная ниже команда работает для случаев, когда вы подключили много устройств. Так device id нужно. В противном случае вы можете просто опустить скобки '[', ']'

1. Чтобы узнать столбец pid, введите:

adb [-s DEVICE_ID] shell ps | head -n 1

Теперь запомните номер столбца для PID. Нумерация начинается с 1,

2. Затем введите следующее:

adb [-s DEVICE_ID] logcat | grep $(adb [-s DEVICE_ID] shell ps \
| grep "com.example" | awk -F" " ' {print $PUT_COLUMN_HERE}')

Просто поместите колонку, в которой вы запомнили PUT_COLUMN_HEREнапример, $5

Предостережение

Каждый раз, когда вы перезапускаете свое приложение, вы должны перезапускать 2-ю команду, потому что приложение получает новый PID из ОС.

Ubuntu: adb logcat -b all -v color --pid = `adb shell pidof -s com.packagename` С цветом и непрерывным журналом приложения

Это работает для меня в Git Bash:

$ pid=$(adb shell ps | grep <package name> | cut -c11-15) ; adb logcat | grep $pid

Поместите это в applog.sh

#!/bin/sh
PACKAGE=$1
APPPID=`adb -d shell ps | grep "${PACKAGE}" | cut -c10-15 | sed -e 's/ //g'`
adb -d logcat -v long \
 | tr -d '\r' | sed -e '/^\[.*\]/ {N; s/\n/ /}' | grep -v '^$' \
 | grep " ${APPPID}:"

затем:applog.sh com.example.my.package

Использование командной строки Windows: adb logcat -d | findstr <package>,

* Это было впервые упомянуто jj_, но мне понадобилось много времени, чтобы найти его в комментариях...

Я написал сценарий оболочки для фильтрации logcat по имени пакета, который я считаю более надежным, чем использование

ps | grep com.example.package | cut -c10-15

Он использует / proc / $ pid / cmdline, чтобы выяснить фактический pid, а затем выполнить grep на logcat.

https://gist.github.com/kevinxucs/7340e1b1dd2239a2b04a

Если вы используете Android Studio, вы можете выбрать процесс, из которого вы хотите получать logcats. Вот скриншот.

введите описание изображения здесь

использование -s !

Вы должны использовать свой собственный тег, посмотрите на: http://developer.android.com/reference/android/util/Log.html

Подобно.

Log.d("AlexeysActivity","what you want to log");

И тогда, когда вы хотите прочитать журнал использования>

adb logcat -s AlexeysActivity

Это отфильтровывает все, что не использует тот же тег.

Источник

Чтобы получить доступ к logcats, вам сначала необходимо установить инструмент командной строки ADB. Инструмент командной строки ADB является частью инструментов платформы Android Studio и может быть загружен отсюда . После этого вам нужно установить переменную путь / окружение для инструментов adb. Теперь вы можете получить доступ к logcat из терминала eclipse / терминала intellij или терминала Mac, если вы используете MacBook.

adb logcat : Чтобы получить весь файл logcat.

adb shell pidof 'com.example.debug' : Чтобы получить идентификатор процесса вашего приложения.

adb logcat pid=<pid> : Чтобы получить logcat, специфичный для вашего приложения.

adb logcat pid=<pid>|grep 'sometext' : Для фильтрации logcat на основе некоторого текста.

Для получения дополнительной информации о фильтрации logcats прочтите это .

ADT v15 для Eclipse позволяет вам указать имя приложения (которое фактически является значением пакета в вашем androidmanifest.xml).

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

РЕДАКТИРОВАТЬ: я пытался указать фильтр приложения из командной строки - но не повезло. Если кто-то выяснит это ИЛИ как остановить автопрокрутку, пожалуйста, дайте мне знать.

Для отлаживаемого приложения я предлагаю

      adb shell run-as my.package.name logcat

запуск от имени не работает для неотлаживаемых приложений, поэтому для них я использую команду--uidфлаг. К сожалению, не существуетuidof, поэтому мне нужно извлечь его изpm. Вот небольшой sh-скрипт для этого:

      function logcat {
  pkg="$1"
  shift
  if [ -z "$pkg" ]; then
    >&2 echo 'Usage: logcat pkg ...'
    return 1
  fi

  uid="$(adb shell pm list package -U $pkg | sed 's/.*uid://')"
  if [ -z "$uid" ]; then
    >&2 echo "pkg '$pkg' not found"
    return 1
  fi

  adb logcat --uid="$uid" "$@"
}

Использованиеlogcat my.package.name. Он принимает дополнительные аргументы, такие как обычный logcat.

Я предпочитаю это--pidofоснованное решение (см. /questions/10801269/filtrovat-logcat-chtobyi-poluchat-tolko-soobscheniya-iz-moego-prilozheniya-v-android/10801271#10801271), поскольку это требует повторного запуска команды при каждом перезапуске процесса.

В качестве варианта можно использовать сторонний скрипт PID Cat от Jake Wharton. Этот скрипт имеет два основных преимущества:

  • показывает записи журнала для процессов из определенного пакета приложения
  • цвет logcat

Из документации:

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

Этот скрипт решает эту проблему путем фильтрации по пакетам приложений.

Выход выглядит как

Обычно я что-то добавляю в сообщения журнала, чтобы сделать их более заметными. Или, например, приложение unity, вы можете использовать «Unity» в качестве строки соответствия.

Для Mac:

      adb logcat | grep "MyUniqueString" 

для Windows (PowerShell):

      adb logcat | Select-String "MyUniqueString"

Другой способ получить журналы точного имени пакета, когда вы находитесь внутри оболочки:

      logcat --pid $(ps -ef | grep -E "com.example.app\$" | awk '{print $2}') 

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

adb shell

а затем следуйте

logcat | grep com.package.name

Этот print all содержит этот пакет.

В качестве альтернативы вы можете попробовать flutter logs --verbose

В Windows 10, с использованием Ionic, мне прекрасно работало объединение findstr с INFO:CONSOLE, генерируемым всеми сообщениями приложения. Итак, моя команда в командной строке:

adb logcat | findstr INFO:CONSOLE

Я не уверен, что есть способ видеть только системные сообщения, касающиеся вашего приложения, но вы можете фильтровать по строке. Если вы ведете журнал в программе, вы можете просто включить определенное уникальное ключевое слово и выполнить фильтрацию на основе этого слова.

Просто используйте фильтры внутри logcat. Там есть кнопка, которая позволяет вам добавлять фильтры. Просто укажите идентификатор приложения, убедитесь, что он выбран впоследствии, и все готово!

Дайте вашему журналу имя. Я назвал мой "Вава".

В Android Studio перейдите в Android-> Изменить настройки фильтра.

Затем введите имя, которое вы дали журналы. В моем случае это называется "вава". Вот несколько примеров типов фильтров, которые вы можете использовать. Вы можете фильтровать по System.out, System.err, журналам или именам пакетов:

Если вы используете Eclipse, нажмите зеленый знак + в окне logCat ниже и введите имя вашего пакета (com.example.yourappname) в поле " По имени приложения". Также выберите любое удобное для вас имя в поле Имя фильтра и нажмите ОК. Вы увидите только сообщения, относящиеся к вашему приложению, когда только что добавленный фильтр выбран на левой панели logCat.

Попробуйте: Окно -> Настройки -> Android -> LogCat. Измените в поле "Показать представление LogCat, если..." значение "VERBOSE". Это помогло мне.

Это, наверное, самое простое решение.

Помимо решения от Tom Mulcahy, вы можете еще больше упростить его, как показано ниже:

alias logcat="adb logcat | grep `adb shell ps | egrep '\bcom.your.package.name\b' | cut -c10-15`"

Использование легко, как обычный псевдоним. Просто введите команду в вашей оболочке:

logcat

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

Конечно, вы можете установить больше псевдонимов для каждого процесса, как вам угодно. Или используйте решение hegaz y.:)

Кроме того, если вы хотите установить уровни ведения журнала, это

alias logcat-w="adb logcat *:W | grep `adb shell ps | egrep '\bcom.your.package.name\b' | cut -c10-15`"

Вы можете использовать команду ниже для получения подробных журналов для вашего пакета приложения.

adb logcat com.example.myapp:V *:S

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

adb logcat Android Время выполнения:E *:S

Другие вопросы по тегам