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

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

Ответ 1

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

EDIT: Похоже, я немного подпрыгнул пистолетом и понял, что вы спрашиваете о logcat в Eclipse. То, что я написал выше, - это использование logcat через adb из командной строки. Я не уверен, передаются ли те же фильтры в Eclipse.

Ответ 2

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

Ответ 3

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

Add filter

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

enter image description here

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

enter image description here

Ответ 4

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

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

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

Ответ 5

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

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

1. Android Studio

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

  • ToolsAndroidEnable ADB Integration.
    Если он уже включен, затем выключите его, а затем вернитесь на

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

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

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

Caveat

При повторном запуске приложения вам необходимо повторно запустить вторую команду, потому что приложение получает новый PID из ОС.

Ответ 6

Это работает для меня в git bash:

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

Ответ 7

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

Ответ 8

Начиная с Android 7.0, logcat имеет параметр фильтра --pid, и доступна команда 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:
fooobar.com/questions/160307/...

Ответ 9

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

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

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

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

Ответ 10

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

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

EDIT: я попытался указать фильтр приложения из командной строки, но не повезло. Если кто-то это выяснит или как остановить автопрокрутку, сообщите мне.

Ответ 11

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

enter image description here

Ответ 12

С помощью командной строки Windows: adb logcat -d | findstr <package>.

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

Ответ 13

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

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

    adb shell

  • Простое использование logcat:

    logcat | grep com.youapp.packagename

Ответ 14

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

Ответ 15

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

Ответ 16

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

Ответ 17

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

Ответ 18

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

enter image description here

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

enter image description here

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

enter image description hereenter image description hereenter image description here

Ответ 19

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

adb logcat | findstr INFO:CONSOLE

Ответ 20

Я попытался использовать Tom Mulcahy, но, к сожалению, он не работал для приложений с несколькими процессами, поэтому я редактирую его в соответствии с моими потребностями.

#!/bin/bash
if [ "$#" -ne 1 ]; then echo "Illegal number of parameters"; exit 1; fi
echo "Lof for package name: $1"
PROCESSES=`adb shell ps | grep "$1" | cut -c10-15`
NUM_OF_PROCESSES=`echo "$PROCESSES" | wc -l`
if [ $NUM_OF_PROCESSES -eq 0 ]; then echo "The application is not running!"; exit 1; fi
COUNTER=1
for process in $PROCESSES; do
        if [ $COUNTER -eq 1 ]; then GREP_TEXT="("; fi
        GREP_TEXT+=$process
        if [ $COUNTER -eq $NUM_OF_PROCESSES ]; then GREP_TEXT+=")"; else GREP_TEXT+="|"; fi
        let COUNTER=COUNTER+1 
        if [ $COUNTER -gt $NUM_OF_PROCESSES ]; then break; fi  
done
adb logcat | grep -E "$GREP_TEXT"

Ответ 21

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

В дополнение к решению от Tom Mulcahy вы можете упростить его, как показано ниже:

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

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

logcat

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

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

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

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

Ответ 22

Использовать -s!

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

Как.

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

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

adb logcat -s AlexeysActivity

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

Источник

Ответ 23

В дополнение к ответу Tom Mulcahy, если вы хотите отфильтровать PID на консоли Windows, вы можете создать небольшой пакетный файл:

@ECHO OFF

:: find the process id of our app (2nd token)
FOR /F "tokens=1-2" %%A IN ('adb shell ps ^| findstr com.example.my.package') DO SET PID=%%B

:: run logcat and filter the output by PID
adb logcat | findstr %PID%

Ответ 24

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

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

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

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

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

Выход выглядит как enter image description here

Ответ 25

Теперь можно ввести тег: nameofthetag или app: nameoftheapp для фильтрации без добавления новых фильтров в панель сохраненных фильтров

Ответ 26

В intelliJ (и, возможно, также в eclipse) вы можете отфильтровать вывод logcat с помощью текстового веб-просмотра, поэтому он печатает в основном все, что создает телефонная заставка

Ответ 27

Еще один вариант Gavriel applog.sh с поддержкой нескольких устройств и приложений с несколькими процессами:

#!/bin/sh
PKG=$1
shift

APPIDS=`adb [email protected] shell ps | awk -v PKG="$PKG" '
    (NR == 1){appcolumn=2; for (i=1; i<=NF; i++) if ($i=="PID") {appcolumn=i}}
    index($0,PKG){print $(appcolumn)}' | paste -d \| -s`

echo "PID's: $APPIDS"
adb [email protected] logcat -v color | awk  "(\$3 ~ /$APPIDS/){print \$0}"

Использование: applog.sh com.example.my.package [-s <specific device>]

Ответ 28

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

Runtime.getRuntime().exec("logcat " + android.os.Process.myPid() + " *:D");

*:D в конце отфильтровывает каждое сообщение ниже уровня журнала Debug, но вы можете оставить это.

Чтобы направлять вывод, скажем, в TextView, см., например, здесь.

Ответ 29

В linux это сработало для меня:

adb logcat | grep 'adb shell ps | grep your.package | awk '{print $2}''

Ответ 30

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