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

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

27 ответов

Решение

Изменить: оригинал ниже. Когда одной Android Studio не было. Но если вы хотите фильтровать все ваше приложение, я бы использовал 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 

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

Согласно 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 - Фатальный
  • S - Silent (высший приоритет, на котором ничего не напечатано)

Привет, я получил решение с помощью этого:

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

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

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

Если бы вы могли согласиться с тем фактом, что ваш журнал поступает из дополнительного окна терминала, я мог бы порекомендовать pidcat (принимать только имя пакета и отслеживать изменения PID.)

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

  • MyActivity1
  • MyActivity2
  • MyActivity3
  • MyService

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

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

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

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

  • MyAppActivity1
  • MyAppActivity2
  • MyAppActivity3
  • MyAppService

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

adb logcat | grep MyApp

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

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

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

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

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

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

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

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

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

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

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

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

Помимо решения от 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`"

Я использую, чтобы сохранить его в файле:

        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();
        }

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

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

app:com.example.myapp

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

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

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

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

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

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

Моя функция.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

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

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

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

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

затем

Log.i(TAG, "hi");

Тогда используйте grep

adb logcat | grep com.myapp

В 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 logcat.

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

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

а в LogCat: create Filter ---> Filter Name & by Log Tag: равно your_Application_Name, это создаст новую вкладку для вашего приложения.

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

adb logcat com.yourpackage:v

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

adb com.your.package: I *: s

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

adb com.your.package:v
Другие вопросы по тегам