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

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

Ответы [ 30 ]

336 голосов
/ 26 марта 2012

Linux и OS X

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

adb logcat | grep -F "`adb shell ps | grep com.asanayoga.asanarebel  | tr -s [:space:] ' ' | cut -d' ' -f2`"

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

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

Windows

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

adb logcat | findstr com.example.package
230 голосов
/ 28 июля 2011

Имена пакетов гарантированно будут уникальными, поэтому вы можете использовать функцию 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 обозначает эмулятор. Если запущено более одного эмулятора, вы можете использовать -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.

51 голосов
/ 02 августа 2013

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

Add filter

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

enter image description here

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

enter image description here

31 голосов
/ 28 декабря 2017

Начиная с 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:
https://stackoverflow.com/a/15622698/7651532

18 голосов
/ 08 мая 2014

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

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

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

13 голосов
/ 20 апреля 2012

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

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

1.Android Studio

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

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

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

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

2. logcat-color

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

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

Кажется, что я могуНе комментируйте предыдущие ответы, поэтому я выложу новый.Это комментарий к Tom Mulcahy ответу, который показывает, как команда должна измениться, чтобы работать на большинстве устройств, поскольку столбец 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 из ОС.

10 голосов
/ 09 марта 2014

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

$ pid=$(adb shell ps | grep <package name> | cut -c11-15) ; adb logcat | grep $pid
9 голосов
/ 05 августа 2014

поместите это в 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

7 голосов
/ 23 мая 2014

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

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

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

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

6 голосов
/ 17 ноября 2013

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

enter image description here

...