2012-03-15 2 views
2

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

LogCat -d myapp.com:I *: S

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

LogCat -d MYCLASS1TAG: Я 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) { } 
+0

Боюсь, что вам нужно перечислить все ваши теги. Или вы фильтруете этот полный журнал вручную. – zapl

+0

В eclipse, когда вы видите logcat, есть столбец приложения, в котором отображается ваше имя пакета. Это заставляет меня поверить, что это возможно. – Ahmed

+0

Я предполагаю, что они фильтруют журнал вручную. По крайней мере, http://developer.android.com/guide/developing/tools/adb.html#logcat только перечисляет 'tag: priority' и' *: priority' – zapl

ответ

5

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

Редактировать: Мне было любопытно, поэтому я просмотрел источник 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 будет меняться каждый раз, когда вы запустите приложение, но это то, как вы можете сделать это в крайнем случае.

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

+0

Спасибо за усилие Брайан :) – Ahmed

0

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

Смежные вопросы