Как фильтровать Android logcat по приложению? [дубликат]
этот вопрос уже есть ответ здесь:
Фильтр LogCat, чтобы получить только сообщения из моего приложения в Android?
29 ответов
Как я могу фильтровать вывод Android logcat по приложению? Мне это нужно, потому что, когда я подключаю устройство, я не могу найти выход, который я хочу из-за спама от других процессов.
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, есть хороший вариант, чтобы получить сообщение с помощью имени пакета. В разделе "изменить конфигурацию фильтра "вы можете создать новый фильтр, добавив свое имя пакета в поле"по имени пакета".
Если бы вы могли жить с тем, что вы входите в систему из дополнительного окна терминала, я мог бы рекомендовать 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. Он будет выглядеть следующим образом:
затем вы добавляете имя в фильтр и, в на имя приложения вы указываете пакет вашего приложения.
на моем ноутбуке 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.myappcom.образец.приложение-имя пакета приложения.
мой .функция файл, это может быть любой использовать
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.андроид.что-то.приложение
используйте первый параметр в качестве имени приложения. Бревно.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 просто ставит (?) в журналах, генерируемых другими процессами, мне было полезно знать, какой процесс генерирует этот журнал. Но все же в этом приложении отсутствует фильтр по имени процесса. Вы можете найти его здесь.
для фильтрации журналов в командной строке используйте следующий скрипт
adb logcat com.yourpackage: v
вывод журнала cat может быть отфильтрован только для отображения сообщений из вашего пакета с помощью этих аргументов.
АБР ком.ваш.пакет:I*: s
Edit-я говорил в ближайшее время.
adb com.your.package:v



Comments