Как исключить определенные сообщения по имени тега с помощью Android adb logcat?



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

663   8  

8 ответов:

Если вы используете adb logcat вы можете пропустить его через grep и использовать его перевернутое соответствие: Из grep manpage:

v, --инвертировать-матч Инвертировать смысл сопоставления, чтобы выбрать несогласованные строки.

например:

$adb logcat | grep --invert-match 'notshownmatchpattern' 

вы можете расширить это с помощью регулярные выражения.

вот пример такого выражения:

"/^(?:emails|tags|addresses)"

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

вы можете сделать это из монитора DDMS (а также Eclipse или Android Studio) с помощью поля ввода регулярного выражения и отрицательные прогнозные утверждения, например я кроме много шума из моего журнала со следующим:

tag:^(?!(WifiMulticast|WifiHW|MtpService|PushClient))

("tag:" не является частью регулярного выражения, но говорит LogCat применять только регулярное выражение к полю тега. Если вы используете этот трюк в сохраненном фильтре, то поместите только регулярное выражение в поле ввода " Tag " и опустите префикс" tag:")

в панели монитора logcat Android Studio вы можете настроить сохраненный фильтр для этого, открыв раскрывающийся список в правом верхнем углу (он может иметь "показать только выбранное приложение") и выбрав изменить конфигурацию фильтра. Создайте новый фильтр logcat и поместите ^(?!(WifiMulticast ...так далее. )) в поле тег журнала, с проверено.

Если вы хотите исключить или фильтровать определенные сообщения по имени тега в Android studio, перейдите в окно LogCat = > изменить конфигурацию фильтра и введите следующее В разделе " по тегу журнала (регулярное выражение):"

^(?!(tag1|tag2|tag3|tag4))

обратите внимание, что нет пробелов, это важно

^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$

это исключит тексты, имеющие содержимое WindowManager, dalvik,...

tag:^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$

это исключит теги WindowManager, dalvik,... из logcat

из оболочки можно использовать команду типа:

adb logcat AlarmManagerService:S PowerManagerService:S *:V

который будет включать в себя все журналы, кроме тех, с AlarmManagerService и PowerManagerService теги.

(The :S означает "тихий", что означает, что ничего не будет напечатано для этих тегов;:V означает "подробный", что означает, что все будет напечатано для всех других тегов. Элемент Android документация для logcat более подробную информацию о других вариантов вы можете использовать в фильтрах.)

вы также можно использовать ANDROID_LOG_TAGS переменная окружения для настройки фильтров по умолчанию, например (в bash):

export ANDROID_LOG_TAGS="AlarmManagerService:S PowerManagerService:S *:V"

объединить как положительные, так и отрицательные lookahead для более мощной фильтрации.

пример:

(?=(AndroidRuntime|Main|RandomTag))(?!(Audio))

теги в первых вложенных скобках включены.

Теги во втором исключаются.

в представлении Eclipse Logcat такой опции нет. Однако вы можете использовать уровень журнала, чтобы исключить любое сообщение, уровень журнала которого слишком низок. Например, установка его в I(nfo) не отображает сообщения D (ebug) и (V)erbose.

простой способ сделать это-просто фильтровать только те теги, которые вы хотите видеть.

adb logcat -s "Tag1" -s "Tag2" -s "Tag3"

вызовет только эти теги.

Comments

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