Як виключити певні повідомлення за назвою TAG, використовуючи log adat Android adb?


122

Logcat дозволяє фільтрувати журнали, але він працює так: Ви визначаєте фільтри, а logcat відображає лише повідомлення, які відповідають фільтрам. Але чи є спосіб відобразити всі журнали, крім деяких TAG, визначених фільтрами?


1
Повідомлення, пов’язане з цим - Як виключити тег входу в систему logcat Android Studio?
RBT

Відповіді:


51

Якщо ви користуєтесь, adb logcatви можете передати це через grep і використовувати його перевернуте відповідність: З сторінки grep :

v, --інверт-відповідність Інвертувати відчуття відповідності, щоб вибрати невідповідні лінії.

Наприклад:

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

Ви можете розширити це за допомогою регулярних виразів .

Ось приклад такого виразу:

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

Цей би перевірив, чи не відбудеться жодне із заданих, тоді grep не перелічить їх.


1
@zest grep- це стандартна команда unix. Для Windows ви можете спробувати find /V "notshownmatchpattern". PS Мабуть, оболонка adb також має a grep. Але це не те саме, що і стандартний unix grep!
PCoder

Так, я вже знайшов це, findstr - suck, можна встановити powerhell або grep (для windows :), те саме, що Linux, як писали в readme, але не так багато на практиці)
Геннадій Рябкін

Ніяких рекламних оголошень, я б просто рекомендував для Windows встановити git за допомогою інструментів командної лінії git. Це дозволило б встановити всі основні інструменти командного рядка unix для windowze.
chris polzer

або встановіть клік для поширених інструментів командної лінії Unix на windowze
chris polzer

@PCoder Ви можете, будь ласка, написати цілу команду для того, щоб зробити те ж саме з Windows CMD?
Рагхав Сатьядєв

217

Це можна зробити за допомогою монітора DDMS (а також Eclipse або Android Studio) за допомогою поля введення звичайних виразів та негативних перспективних тверджень , наприклад, я виключаю багато шуму з мого журналу із наступним:

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

(Тег: "не є частиною регулярного виразу, але вказує LogCat застосовувати тільки регулярний вираз до поля Тег. Якщо ви використовуєте цей трюк у збереженому фільтрі, тоді просто введіть регулярний вираз у поле введення" Тег ". , і пропустіть префікс "tag:")

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


Гарне рішення для Eclipse LogCat
Серафима

6
Моє бачення одразу менш розмито! : D
suomi35

Це те, що я шукаю досить довго
ар-г

Працювали як шарм! Велике дякую. Додайте також слово "dalvikvm". Це найбільше дратує в logcat.
Атул

1
Відповідь з фільтрацією LogCat є правильний один - stackoverflow.com/a/17468665/828237
kwesolowski

74

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

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

Зауважте, що пробілів немає, це важливо


ця відповідь працює в logcat intellij 15> Редагувати конфігурацію фільтра, що відкриває модальний назви "Створити новий фільтр Logcat".
petey

1
Дякую. У телефонів Btw Lenovo є безліч спам-повідомлень
Чайка

Це запобігає лише тим, щоб журнали з цим тегом не передавалися в журнал. Монітор все ще переповнюється тими дзвінками у фоновому режимі, і він виштовхує не "tag1 | tag2 | тощо" дзвінки з буфера. Чи є шлях до цього?
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*))
Гурупад Мамадапур

І багато іншого: (Gnss | NetRec | ResolverController | GAv4 | AsyncOperation | AppOps | WificondControl | aofp | wifi | netmgr | ctxmgr | BestClock | FirebaseInstanceId | android.os.Debug | memtrack | netd | systemd | мережевий | мережевий | мережевий | мережевий | мережевий | мережевий | мережевий | мережевий | мережевий | сімейний | BroadcastQueue | ConnextivityService | WakeLock | HttpClientWrapper | RAWR | Тенор | BgTask | WifiService | BluetoothAdapter | UpdateStatsService | AppIdleHistory | Зв'язок | VelvetNetworkClient | WorkerManager | EGL_emulation | балакучий | gralloc | InputReader | ActivityThread | ActivityTaskManager | UsageStatsService | ocess.gservice | DropBoxManagerService | EventLogChimeraService | PContextMetricsRunner))
Graeme

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це "мовчати". Я оновив відповідь, щоб пояснити це, як ви пропонуєте.
Багатий

2
Ви можете фільтрувати вихід logcat таким же чином, використовуючи змінну середовища ANDROID_LOG_TAGS. Мені здається корисним встановити його завжди, щоб виключити деякі більш спам-процеси.
емідандер

16

Поєднуйте як позитивну, так і негативну позицію для більш потужної фільтрації.

Приклад:

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

Теги в перші вкладені дужки включаються.

Теги в секунду виключаються.


IMHO, Це більш комплексний спосіб фільтрації журналів.
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), які мають ербозу.


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