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

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

Ответы [ 30 ]

2 голосов
/ 20 апреля 2015

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

enter image description here

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

enter image description here

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

enter image description here enter image description here enter image description here

1 голос
/ 07 августа 2017

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

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

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

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

1 голос
/ 11 марта 2017

В дополнение к ответу 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%
1 голос
/ 14 мая 2016

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

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

Нравится.

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

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

adb logcat -s AlexeysActivity

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

Источник

1 голос
/ 11 ноября 2015

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

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

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

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

logcat

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

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

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

alias logcat-w="adb logcat *:W | grep `adb shell ps | egrep '\bcom.your.package.name\b' | cut -c10-15`"
1 голос
/ 31 августа 2015

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

#!/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"
0 голосов
/ 30 августа 2018

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

adb logcat | grep `adb shell ps | grep your.package | awk '{print $2}'`
0 голосов
/ 02 апреля 2016

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

#!/bin/sh
PKG=$1
shift

APPIDS=`adb $@ 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 $@ logcat -v color | awk  "(\$3 ~ /$APPIDS/){print \$0}"

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

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

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

0 голосов
/ 01 июля 2014

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

...