Как фильтровать Android logcat по приложению? [дубликат]



этот вопрос уже есть ответ здесь:




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

    29 ответов



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

1560   27  

27 ответов:

изменить: оригинал находится ниже. Когда одной 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 

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

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

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

adb logcat ActivityManager:I MyApp:D *:S

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

  • V-подробный (самый низкий приоритет)
  • D-Debug
  • I-Info
  • W - Предупреждение
  • E-Error
  • F-Fatal
  • S-Silent (высший приоритет, на котором никогда ничего не печатается)

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

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

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

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

enter image description here

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

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

  • MyActivity1
  • MyActivity2
  • MyActivity3
  • MyService

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

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

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

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

  • MyAppActivity1
  • MyAppActivity2
  • MyAppActivity3
  • MyAppService

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

adb logcat | grep MyApp

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

положите это на applog.sh

#!/bin/sh
PACKAGE=
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, заполните форму имя фильтра. Затем заполните по имени приложения с помощью пакета приложений. (например : моя заявка "Адукан" и пакет "ком.адукан", поэтому я заполнить имя приложения, пакет приложений "ком.адукан")

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

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

enter image description here

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

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

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

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

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

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

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

Что я обычно делаю-это отдельный фильтр на 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`"

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

app:com.example.myapp

com.образец.приложение-имя пакета приложения.

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

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

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

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

$ logcat-myapp

$ logcat com.андроид.что-то.приложение

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

enter image description here

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

и в 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 для фильтрации "по имени приложения", где вы вводите имя пакета приложения.

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

$ git grep 'String\s\+TAG\s*=\s*' |  \
  perl -ne 's/.*String\s+TAG\s*=\s*"?([^".]+).*;.*/: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 может быть отфильтрован только для отображения сообщений из вашего пакета с помощью этих аргументов.

АБР ком.ваш.пакет:I*: s

Edit-я говорил в ближайшее время.

adb com.your.package:v

Comments

    Ничего не найдено.