Как фильтровать Android logcat приложением?

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

Ответ 1

Изменить: оригинал ниже. Когда одной Android-студии не было. Но если вы хотите фильтровать все ваше приложение, я бы использовал pidcat для просмотра терминала или Android Studio. Используя pidcat вместо logcat, теги не должны быть приложением. Вы можете просто называть его pidcat com.your.application

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

Как.

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

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

adb logcat -s AlexeysActivity 

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

Ответ 2

Согласно http://developer.android.com/tools/debugging/debugging-log.html:

Вот пример выражения фильтра, который подавляет все сообщения журнала, кроме тех, которые имеют тег "ActivityManager", с приоритетом "Информация" или выше, и все сообщения журнала с тегом "MyApp" с приоритетом "Отладка" или выше:

adb logcat ActivityManager:I MyApp:D *:S

Последний элемент в вышеприведенном выражении *: S устанавливает уровень приоритета для всех тегов в "тихий", обеспечивая тем самым отображение сообщений журнала с "View" и "MyApp".

  • V - подробный (самый низкий приоритет)
  • D - Отладка
  • я - Информация
  • W - Предупреждение
  • E - Ошибка
  • F - Fatal
  • S - Беззвучный (самый высокий приоритет, на котором ничего не печатается)

Ответ 3

Привет, я получил решение, используя это:

Вы должны выполнить эту команду с терминала. Я получил результат,

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

Ответ 4

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

enter image description here

Ответ 5

Предположим, что ваше приложение с именем MyApp содержит следующие компоненты.

  • MyActivity1
  • MyActivity2
  • MyActivity3
  • MyService

Чтобы отфильтровать вывод журнала из вашего приложения MyApp с помощью logcat, вы должны ввести следующее.

adb logcat MyActivity1:v MyActivity2:v MyActivity3:v MyService:v *:s

Однако это требует, чтобы вы знали имена TAG для всех компонентов вашего приложения, а не для фильтрации с использованием имени приложения MyApp. Подробнее см. logcat.

Одним из решений, позволяющих фильтровать на уровне приложения, было бы добавить префикс к каждому из ваших уникальных TAG.

  • MyAppActivity1
  • MyAppActivity2
  • MyAppActivity3
  • MyAppService

Теперь фильтр дикой карты на выходе logcat может быть выполнен с использованием префикса TAG.

adb logcat | grep MyApp

Результат будет результатом всего приложения.

Ответ 6

Если бы вы могли жить с тем, что вы заходите из дополнительного терминала, я бы рекомендовал pidcat (Возьмите только имя пакета и изменения 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

Когда мы получим некоторую ошибку из нашего приложения, Logcat автоматически отобразит фильтр сеанса. Мы можем создать сеансовый фильтр самостоятельно. Просто добавьте новый фильтр logcat, заполните форму имени фильтра. Затем введите имя приложения в свой пакет приложений. (например: мое приложение "Adukan", а пакет "com.adukan", поэтому я заполняю именем приложения с пакетом приложений "com.adukan" )

Ответ 9

Если вы используете Eclipse, вы можете фильтровать приложение так же, как это возможно в Android Studio, представленном shadmazumder.

Просто перейдите в logcat, нажмите Показать сохраненные фильтры, затем добавьте новый фильтр logcat. Появится следующее:

enter image description here

Затем вы добавляете имя в фильтр и в по имени приложения указываете пакет своего приложения.

Ответ 10

На моем ноутбуке Windows 7 я использую adb logcat | найдите "com.example.name" , чтобы отфильтровать вывод logcat, связанный с системной программой, от остальных. Выход из программы logcat передается в команду find. Каждая строка, содержащая "com.example.name" , выводится в окно. Двойные кавычки являются частью команды find.

Чтобы включить вывод из моих команд журнала, я использую имя пакета, здесь "com.example.name" , как часть первого параметра в моих командах Log, таких как:

Log.d("com.example.name activity1", "message");

Примечание. Мой телефон Samsung Galaxy выпускает гораздо меньше выходных программ чем эмулятор уровня 17.

Ответ 11

Да, теперь вы получите его автоматически....
Обновить до AVD 14, где logcat будет автоматически session filter
где он фильтрует журнал в вашем конкретном приложении (пакете)

Ответ 12

Слева в окне логарифма у вас есть окна "Сохраненные фильтры". Здесь вы можете добавить новый фильтр logcat по имени приложения (например, com.your.package)

Ответ 13

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

Ответ 14

Как правило, я делаю эту команду "adb shell ps" в командной строке (позволяет видеть процессы), и можно обнаружить приложение pid. С помощью этого pid в руках перейдите в Eclipse и напишите pid: XXXX (XXXX - это приложение pid), а затем выходные данные журнала отфильтрованы этим приложением.

Или, проще говоря... в режиме logcat на Eclipse, найдите любое слово, связанное с вашим желаемым приложением, откройте pid, а затем сделайте фильтр с помощью pid "pid: XXXX".

Ответ 15

Я использую его для хранения в файле:

        int pid = android.os.Process.myPid();
        File outputFile = new File(Environment.getExternalStorageDirectory() + "/logs/logcat.txt");
        try {
            String command = "logcat | grep " + pid + " > " + outputFile.getAbsolutePath();
            Process p =  Runtime.getRuntime().exec("su");
            OutputStream os = p.getOutputStream();
            os.write((command + "\n").getBytes("ASCII"));
        } catch (IOException e) {
            e.printStackTrace();
        }

Ответ 16

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

В дополнение к решению от 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`"

Ответ 17

вы можете достичь этого в logcat Eclipse, введя следующее в поле поиска.

app:com.example.myapp

com.example.myapp - это имя пакета приложения.

Ответ 18

В Android Studio в окне Android Monitor: 1. Выберите приложение, которое вы хотите фильтровать. 2. Выберите "Показать только выбранное приложение"

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

Ответ 19

используйте первый параметр в качестве имени вашего приложения. Log.d( "your_Application_Name", "сообщение" );

и в LogCat: создать фильтр --- > Имя фильтра и тег журнала: равен 'your_Application_Name' он создаст новую вкладку для вашего приложения.

Ответ 20

Использовать полные имена классов для тегов журнала:

public class MyActivity extends Activity {
  private static final String TAG = MyActivity.class.getName();
}

Тогда

Log.i(TAG, "hi");

Затем используйте grep

adb logcat | grep com.myapp

Ответ 21

Приложение Android Device Monitor, доступное в sdk/tools/monitor, имеет параметр logcat для фильтрации "по имени приложения", где вы вводите имя пакета приложения.

Ответ 22

моя функция .bash_profile, она может быть использована

logcat() {
    if [ -z "$1" ]
    then
        echo "Process Id argument missing."; return
    fi
    pidFilter="\b$1\b"
    pid=$(adb shell ps | egrep $pidFilter | cut -c10-15)
    if [ -z "$pid" ]
    then
        echo "Process $1 is not running."; return
    fi
    adb logcat | grep $pid
}

alias logcat-myapp="logcat com.sample.myapp"

Использование:

$logcat-myapp

$logcat com.android.something.app

Ответ 23

В Linux/Un * X/Cygwin вы можете получить список всех тегов в проекте (с добавленным :V после каждого) с помощью этой команды (разделение, потому что читаемость):

$ git grep 'String\s\+TAG\s*=\s*' |  \
  perl -ne 's/.*String\s+TAG\s*=\s*"?([^".]+).*;.*/$1:V/g && print ' | \
  sort | xargs
AccelerometerListener:V ADNList:V Ashared:V AudioDialog:V BitmapUtils:V # ...

Он охватывает теги, определяющие оба способа определения тегов:

private static final String TAG = "AudioDialog";
private static final String TAG = SipProfileDb.class.getSimpleName();

А затем просто используйте его для логарифма adb.

Ответ 24

Я нашел приложение в магазине, которое может отображать имя/процесс журнала. Поскольку Android Studio просто помещает (?) В журналы, созданные другими процессами, мне было полезно узнать, какой процесс генерирует этот журнал. Но все-таки это приложение не пропускает фильтр по имени процесса. Вы можете найти здесь здесь.

Ответ 25

Добавьте свой пакет приложений в "Имя фильтра", нажав кнопку "+" в левом верхнем углу в logcat.

Ответ 26

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

adb logcat com.yourpackage: v

Ответ 27

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

adb com.your.package: я *: s

Изменить - я говорил в ближайшее время.

adb com.your.package:v