Программная фильтрация logcat для моего приложения.не работает для меня - PullRequest
2 голосов
/ 16 марта 2012

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

logcat -d myapp.com:I *: S

не работает, результаты пусты, но если я сделаю

logcat -d MYCLASS1TAG: I MYCLASS2TAG *: S

тогда это работает, но у меня много классов ..

как мне просто указать название пакета и получить результаты .. ??

try  {      
       Process process = Runtime.getRuntime().exec("logcat -d");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

   String line;  

   while ((line = bufferedReader.readLine()) != null) 
    {


 //       write to my file here

   }
  }  catch (IOException e)    {   }

Ответы [ 2 ]

5 голосов
/ 16 марта 2012

Я не уверен, как это сделать из командной строки, но плагин ADT для Eclipse позволяет фильтровать по приложениям.

edit: мне было любопытно, поэтому я посмотрел источник ADT на рисункекак ADT это делает.Короче говоря, он использует опцию -v long для включения PID в каждое сообщение и сохраняет карту от PID до имени приложения.Соответствующие файлы исходного кода находятся в пакете com.android.ddmuilib.logcat.LogCatMessageParser и com.android.ddmuilib.logcat.LogCatPidToNameMapper.

Итак, один из обходных путей, который я могу придумать, - это вызвать оболочку (adb shell), определить свой PID, используя ps, а затем перенаправьте вывод adb logcat в grep:

adb logcat -v long | grep <your PID>

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

edit: я только что заметил, что длинный формат на самом деле печатает PID на одной строке и сообщение на следующей строке, поэтому вам может понадобиться использовать что-то вроде awk вместо grep.Я опробую несколько вещей и выложу продолжение.

0 голосов
/ 16 марта 2012

Итак, насколько я понимаю, вы пытаетесь запустить logcat на устройстве, чтобы захватить и сохранить в файл.К сожалению, в текущей командной строке filterspec поддерживает только формат tag:priority.Вам нужно будет запустить вывод через свой построчный фильтр.Вероятно, вы можете автоматизировать это, вычислив свой PID, а затем отфильтровав строки на основе этого.

...