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

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

Solutions Collecting From Web of "Как фильтровать Android logcat приложением?"

Вы должны использовать свой собственный тег, посмотрите: 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 устанавливает уровень приоритета для всех тегов в «silent», обеспечивая тем самым отображение только сообщений журнала с «View» и «MyApp».

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

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

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

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

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

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

Предположим, что ваше приложение с именем 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

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

 adb logcat | grep MyApp 

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

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

Положите это на 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 , нажмите « Показать сохраненные фильтры» , затем добавьте новый фильтр логарифма . Появится следующее:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 app:com.example.myapp 

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

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

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

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

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

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

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

затем

 Log.i(TAG, "hi"); 

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

 adb logcat | grep com.myapp 

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

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

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

 $ 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.

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

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

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

Adb logcat com.yourpackage: v

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

Adb com.your.package: I *: s

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

 adb com.your.package:v