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


123

Logcat позволяет фильтровать журналы, но работает он следующим образом: вы определяете фильтры, а logcat отображает только сообщения, соответствующие фильтрам. Но есть ли способ отобразить все журналы, ЗА ИСКЛЮЧЕНИЕМ некоторых тегов, определенных фильтрами?


Ответы:


52

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

v, --invert-match Инвертировать смысл совпадения, чтобы выбрать несовпадающие строки.

Например:

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

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

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

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

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


1
@zest grep- это стандартная команда unix. Для окон вы можете попробовать find /V "notshownmatchpattern". PS Судя по всему, в оболочке adb тоже есть grep. Но это не то же самое, что стандартный unix grep!
PCoder,

Да, я уже нашел, findstr - suck, можно установить powershell или grep (для windows :), то же, что и Linux, как было написано в readme, но не так много на практике)
Геннадий Рябкин

Нет, я бы просто посоветовал Windows установить git с инструментами командной строки git. Это установит все основные инструменты командной строки unix для windowze.
Крис Ползер

или установите clink для распространенных инструментов командной строки unix на windowze
Крис Ползер

@PCoder, не могли бы вы написать целую команду, чтобы сделать то же самое с Windows CMD?
Raghav Satyadev

217

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

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

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

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


Хорошее решение для Eclipse LogCat
Seraphim's

6
Мое зрение сразу становится менее размытым! : D
suomi35

Это то, что я ищу довольно давно
ar-g

Работал как шарм! Большое спасибо. Также добавьте в него слово «dalvikvm». Больше всего это раздражает в logcat.
Атул

1
Ответ с фильтрацией logcat является правильным - stackoverflow.com/a/17468665/828237
kwesolowski

74

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

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

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


этот ответ работает в intellij 15 logcat> Изменить конфигурацию фильтра, который вызывает модальное окно с названием «Создать новый фильтр Logcat».
Пити,

1
Спасибо.
Чайка

Это только предотвращает отображение журналов с этим тегом в журнал. Монитор по-прежнему завален этими вызовами в фоновом режиме и выталкивает из буфера вызовы, отличные от "tag1 | tag2 | etc". Есть ли способ обойти это?
TheBestBigAl

Ответ с фильтрацией logcat является правильным - stackoverflow.com/a/17468665/828237
kwesolowski

Или если один тег^(?!tag1)
Влад

34

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

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

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

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


Еще немного:^(?!(WifiMulticast|WifiHW|MtpService|PushClient|EGL_emulation|OpenGl*|InputReader|art|dalvik|Environment|DataRouter|AlarmManager|WindowManager|PhoneStatusBar|ActivityManager|ResourceType|PackageManager|gralloc*))
Gurupad Mamadapur

И многое другое: (Gnss | NetRec | ResolverController | GAv4 | AsyncOperation | AppOps | WificondControl | aofp | wifi | netmgr | ctxmgr | BestClock | FirebaseInstanceId | android.os.Debug | memtrack | netd | system_server | | StrictMode | BluetoothMode | BroadcastQueue | ConnextivityService | WakeLock | HttpClientWrapper | RAWR | Тенор | BgTask | WifiService | BluetoothAdapter | UpdateStatsService | AppIdleHistory | Связь | VelvetNetworkClient | WorkerManager | EGL_emulation | болтливый | gralloc | InputReader | ActivityThread | ActivityTaskManager | UsageStatsService | ocess.gservice | DropBoxManagerService | EventLogChimeraService | PContextMetricsRunner))
Грэм

32

Из оболочки вы можете использовать такую ​​команду, как:

adb logcat AlarmManagerService:S PowerManagerService:S *:V

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

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

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

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

Это хорошее предложение, оно работает из командной строки без конвейеров. Вы должны обновить свой ответ imho, чтобы объяснить, что часть «: S» будет выдавать только сообщения «Серьезные» для названных компонентов (что вряд ли когда-либо произойдет). И снова хороший ответ. Люди должны проголосовать за этого ...
Крис Маркл,

1
@ChrisMarkle Согласно документам, это Sозначает «тихий». Я обновил ответ, чтобы объяснить это, как вы предлагаете.
Rich

2
Вы можете фильтровать вывод logcat таким же образом, используя переменную среды ANDROID_LOG_TAGS. Я считаю полезным, чтобы он всегда был настроен на исключение некоторых из процессов, которые больше всего распространяют спам.
emidander 06

16

Комбинируйте как положительный, так и отрицательный просмотр вперед для более эффективной фильтрации.

Пример:

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

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

Теги во второй исключены.


ИМХО, это более комплексный способ фильтрации логов.
Ritesh Gune

4

Вот список фильтров, которые я использовал для игнорирования системных журналов Samsung . будет работать и с другими устройствами.

Logcat -> Изменить конфигурацию фильтра -> Тег журнала

^(?!(PowerUI|PowerPlanningReceiver|BatteryService|SamsungPhoneWindowManager|MotionRecognitionService|AudioService|APM_AudioPolicyManager|SensorService|StorageManager|SignalClusterView|BatteryService|TelephonyManager|UsbDeviceManager|KeyguardUpdateMonitor|BatteryController|ActivityManager|LauncherAppsService|AppsModel|DataLoader|PackageManager|LauncherApps|ContactsImsCommon|ImsUtil|ImsSettingsProvider|DeviceConfigManager|WifiService|BackupManagerService|PersonaManagerService|DefaultDialerManager|ResourceType|NetworkUIGlobals|NetworkProxy|FileWriteThread|ReflectUtil|PhoneApp|SamsungAlarmManager|display|DeviceStorageMonitorService|wrapperGPS|io_stats|GnssLocationProvider|KeyguardServiceBoxContainer|ConnectivityService|SSRM|TLC_TIMA_PKM_initialize|mc_tlc_communication|TeeDriverClient|TLC_TIMA_PKM_measure_kernel|AutomaticBrightnessController|BatteryUtils|WifiConnectivityManager|Launcher|IconView|ApplicationPackageManager|LiveIconLoader|WifiScanningService|WifiHAL|WifiScanController|ApplicationPolicy|SELinux|TimaKeyStoreProvider|ActivityThread|zygote|GservicesProvider|GoogleHttpClient|cr_ChildProcessConnect|WificondControl|Netd|Tethering|ContactsImsCommon|ImsConstants|tnet-jni|BatteryStatsService|SignalClusterView|LiveIconManager|BitmapCacheContainer|com.samsung.android.app.powerplanning.utils.BatteryUtils|ReflectField|cr_ChildConnAllocator|TinLoadingFailTracker|WifiPermissionsUtil|EventHandler_FLP|android.hardware.wifi@1.0-service|BluetoothAdapter|bt_btm|WifiPermissionsUtil|GeofencerStateMachine|Places|GCoreUlr|BeaconBle|Sensors|SLocation|ContactsProvider_EventLog|WificondScannerImpl|AlarmManager|AlarmManagerEXT|MultiDex|NetworkSecurityConfig|DnsProxyListener|dalvik-internals|mobileconfig|SsacManager|ImsPhoneStateManager|VolteServiceModule|PdnController|PowerManagerService|GameManagerService|NoSync|SensorManager|DisplayPowerController|NetworkController|SamsungAnalytics111040|tlcFidoAuthnr|InputReader|FlashlightController|KeyguardWallpaperController|OpenGLRenderer|EasyMuteController|Vibrator|VibratorService|PowerManagerUtil|LightsService|WindowManager|InputDispatcher|InputReader|CustomFrequencyManagerService|SystemUIAnalytics|SamsungAnalytics|swipe|PanelView|BadgeCache|MARsPolicyManager|MARsDBManager|KeyguardClockPage|ScanManager|RegiMgrBase|secImsManager|GeolocationController|MultiSimUtils|CarrierText|Mms|NetworkNotificationUI2|CommandListener|ReschedulableTimer|RCS-ContactsImsCommon|Settings|DmConfigModule|NotificationMgr2|PhoneMultiSimUtils|PhoneProxy|VideoCapabilities|AudioCapabilities|SAIV_FACE|FaceController|FaceService|SamsungAnimationCreator|ImageWallpaper|Finsky|VirtualScreen|PagedView|DragLayer|HomeContainer|ImsServiceStub|DmConfigHelper|TZ))

1

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

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

Поднимет только эти теги.


0

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


Ну, я забыл упомянуть, что использую это в командной строке / внутри телефона для чтения журналов. И каждый раз, когда я нажимаю на экран, он показывает сообщения InputReader / InputDispatcher, которые просто наводняют экран. Теперь я вижу, что настройка фильтров на «InputReader: S InputDispatcher: S» работает :) Спасибо за ответ!
Костас
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.