Logcat позволяет фильтровать журналы, но он работает следующим образом: вы определяете фильтры, а logcat отображает сообщения, соответствующие фильтрам. Но есть ли способ отображать все журналы? ИСКЛЮЧИТЬ некоторые TAG, определенные фильтрами?
Как исключить определенные сообщения по имени TAG с помощью Android adb logcat?
Ответ 1
Если вы используете adb logcat
, вы можете передать его через grep и использовать его инвертированное соответствие:
Из grep manpage:
v, -invert-match Инвертируйте смысл соответствия, чтобы выбрать несогласованные строки.
Например:
$adb logcat | grep --invert-match 'notshownmatchpattern'
Вы можете расширить это, используя регулярные выражения.
Вот пример такого выражения:
"/^(?:emails|tags|addresses)"
Это будет проверять, чтобы любое из данных происходило, grep не перечислил их.
Ответ 2
Вы можете сделать это изнутри DDMS Monitor (а также Eclipse или Android Studio) с полем ввода регулярных выражений и отрицательные ожидания вперед, например, я исключаю много шума из своего журнала со следующим:
tag:^(?!(WifiMulticast|WifiHW|MtpService|PushClient))
( "tag:" не является частью регулярного выражения, но сообщает LogCat применять только к регулярному выражению в поле "Тег". Если вы используете этот трюк в сохраненном фильтре, тогда просто установите регулярное выражение в "тег" "и опустить префикс" tag: ")
В панели мониторинга logcat Android Studio вы можете настроить для этого сохраненный фильтр, открыв раскрывающийся список в правом верхнем углу (может быть выбран "Показать только выбранное приложение" ) и выбрать "Редактировать конфигурацию фильтра". Создайте новый фильтр logcat и поместите ^(?!(WifiMulticast
... и т.д. ))
в поле "Журнал тегов" с флажком Regex
.
Ответ 3
Если вы хотите исключить или фильтровать определенные сообщения по имени тега в студии Android, перейдите в окно LogCat window = > Edit Filter и введите в разделе "Tag Tag (regex)" следующее: "
^(?!(tag1|tag2|tag3|tag4))
Обратите внимание, что нет пробелов, это важно
Ответ 4
В оболочке вы можете использовать команду:
adb logcat AlarmManagerService:S PowerManagerService:S *:V
который будет включать все журналы, кроме тегов с тегами AlarmManagerService
и PowerManagerService
.
(:S
означает "silent", что означает, что для этих тегов ничего не будет напечатано, :V
означает "verbose", что означает, что все будет напечатано для всех других тегов. Документация для Android для logcat содержит более подробную информацию о других параметрах, которые вы можете использовать в фильтрах.)
Вы также можете использовать переменную среды ANDROID_LOG_TAGS
для настройки фильтров по умолчанию, например. (в bash):
export ANDROID_LOG_TAGS="AlarmManagerService:S PowerManagerService:S *:V"
Ответ 5
^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$
Это исключает тексты, содержащие содержимое WindowManager, dalvik,...
tag:^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$
Это исключает теги WindowManager, dalvik,... из logcat
Ответ 6
Объедините как положительные, так и отрицательные результаты для более мощной фильтрации.
Пример:
(?=(AndroidRuntime|Main|RandomTag))(?!(Audio))
Включены теги в первых вложенных круглых скобках.
Теги во втором исключены.
Ответ 7
В представлении Eclipse Logcat нет такой опции. Однако вы можете использовать уровень журнала, чтобы исключить любое сообщение, уровень журнала которого слишком низок. E. g. установка его на я (nfo) не отображает сообщения D (ebug) и (V) erbose.