Как исключить определенные сообщения по имени тега с помощью Android adb logcat?
Logcat позволяет фильтровать журналы, но это работает так:вы определяете фильтры и logcat отображает только сообщения, которые соответствуют фильтрам. Но есть ли способ отобразить все журналы, кроме некоторых тегов, определенных фильтрами?
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