Фильтровать сообщения журнала по PID или пакету приложения в Android

Я понимаю, что для фильтрации сообщений журнала Android мы можем использовать что-то вроде

adb logcat ActivityManager:I MyApp:D *:S

Но в моем приложении я использую разные TAGS для разных действий и хочу фильтровать все журналы только этого приложения. Как лучше всего это сделать?

Нужно ли указывать все теги в команде?

Или использовать общий тег для всего приложения, единственный альтернативный вариант?

Просматривая сообщения журнала в Eclipse, я заметил, что есть столбец с именем PID и другой столбец с именем Application (содержит имя пакета приложения), оба из которых (очевидно) одинаковы для разных Tag для данного приложения. Это говорит о том, что должна быть возможность фильтровать не только по тегу, но и по pid/пакету.


person Atul Goyal    schedule 11.03.2012    source источник
comment
Atul, используйте ActivityManager для получения PID вашего приложения, а затем наполнителя на основе PID   -  person ρяσѕρєя K    schedule 11.03.2012
comment
ааа, я обновил свой вопрос до того, как увидел ваш комментарий. Можно ли фильтровать по pid, вот что я хочу сделать.   -  person Atul Goyal    schedule 11.03.2012
comment
@imrankhan, как нам фильтровать по pid?   -  person Atul Goyal    schedule 11.03.2012
comment
вы можете использовать с grep в трубе?   -  person Blackbelt    schedule 12.03.2012
comment
@blackbelt: Да, это сработает, но в командной строке я просто проверяю, как выглядит вывод, но на самом деле мне нужно передать аргументы команды logcat в библиотеку ACRA, так что grep в канале там не сработает.   -  person Atul Goyal    schedule 12.03.2012


Ответы (1)


Я использую общий формат TAG следующим образом.

Например, для Activities я определил базовый класс Activity...

public class MyCompanyActivity extends Activity {
    protected final String TAG = this.getClass().getName();
    ...
}

Все Activities, которые я создаю, расширяют Activity, например.

public class FishActivity extends MyCompanyActivity {
    ...
}

В результате FishActivity будет иметь TAG, который...

com.mycompany.myapp.FishActivity

Все, что мне нужно сделать, это отфильтровать логарифм на com.mycompany.myapp

person Squonk    schedule 11.03.2012
comment
Спасибо, этот подход выглядит чистым способом сделать это, нам даже не нужно объявлять переменную TAG в каждом действии, но просто интересно, есть ли какой-либо побочный эффект от использования этого подхода? Поскольку вы сказали, что я использую... значит, это должно работать нормально, без каких-либо подвохов, верно? - person Atul Goyal; 12.03.2012
comment
@AtulGoyal: я не могу придумать ни одного побочного эффекта и использую этот подход с тех пор, как начал разработку для Android. Я создал базовые классы для Application, Activity, Service и так далее. Из-за этого мне никогда не нужно вручную определять TAG, и он всегда доступен и отражает имя класса с уникальным префиксом package.appname. У меня даже есть пользователи, которые помогают мне отлаживать мое приложение, используя что-то вроде Catlog, фильтруя название компании и отправляя мне результаты по электронной почте. Это гарантирует, что я получаю только информацию, связанную с моими приложениями, и ничего больше, что может, например, нарушить конфиденциальность пользователя. - person Squonk; 12.03.2012
comment
Еще одна вещь, как вы фильтруете logcat на com.mycompany.myapp Команда logcat не будет работать для меня, когда я набираю adb logcat com.mycompany.myapp:I *:S, но работает для adb logcat com.mycompany.myapp.FishActivity:I *:S - person Atul Goyal; 12.03.2012
comment
Я не использую командную строку adb, я использую проекцию DDMS в Eclipse (доступно через Window -> Open Perspective -> Other). Я указываю фильтр для соответствия com.mycompany.myapp.*, и он работает нормально. - person Squonk; 12.03.2012
comment
Итак, нет никакого способа заставить его работать вне Eclipse? На самом деле я использую эту библиотеку ACRA для сбора данных о сбоях при сбое приложения, поэтому передайте туда параметры команды logcat. Команда adb logcat сейчас кажется не очень мощной :( - person Atul Goyal; 12.03.2012
comment
Вы пытались использовать регулярное выражение? Вот так: adb logcat com.mycompany.myapp.*:I *:S Звездочка в конце myapp — это регулярное выражение, включающее любые символы. Я сам не пробовал, но, возможно, стоит попробовать. - person AgentKnopf; 20.03.2012