Logcat дозволяє фільтрувати журнали, але він працює так: Ви визначаєте фільтри, а logcat відображає лише повідомлення, які відповідають фільтрам. Але чи є спосіб відобразити всі журнали, крім деяких TAG, визначених фільтрами?
Logcat дозволяє фільтрувати журнали, але він працює так: Ви визначаєте фільтри, а logcat відображає лише повідомлення, які відповідають фільтрам. Але чи є спосіб відобразити всі журнали, крім деяких TAG, визначених фільтрами?
Відповіді:
Якщо ви користуєтесь, adb logcat
ви можете передати це через grep і використовувати його перевернуте відповідність: З сторінки grep :
v, --інверт-відповідність Інвертувати відчуття відповідності, щоб вибрати невідповідні лінії.
Наприклад:
$adb logcat | grep --invert-match 'notshownmatchpattern'
Ви можете розширити це за допомогою регулярних виразів .
Ось приклад такого виразу:
"/^(?:emails|tags|addresses)"
Цей би перевірив, чи не відбудеться жодне із заданих, тоді grep не перелічить їх.
grep
- це стандартна команда unix. Для Windows ви можете спробувати find /V "notshownmatchpattern"
. PS Мабуть, оболонка adb також має a grep
. Але це не те саме, що і стандартний unix grep
!
Це можна зробити за допомогою монітора DDMS (а також Eclipse або Android Studio) за допомогою поля введення звичайних виразів та негативних перспективних тверджень , наприклад, я виключаю багато шуму з мого журналу із наступним:
tag:^(?!(WifiMulticast|WifiHW|MtpService|PushClient))
(Тег: "не є частиною регулярного виразу, але вказує LogCat застосовувати тільки регулярний вираз до поля Тег. Якщо ви використовуєте цей трюк у збереженому фільтрі, тоді просто введіть регулярний вираз у поле введення" Тег ". , і пропустіть префікс "tag:")
На панелі монітора logcat Android Studio ви можете налаштувати збережений фільтр для цього, відкривши спадне меню у верхньому правому куті (у ньому може бути вибрано "Показати лише вибрану програму") та вибрати Редагувати конфігурацію фільтра. Створіть новий фільтр logcat та поставте ^(?!(WifiMulticast
... тощо. ))
у полі "Тег журналу", щоб встановити Regex
прапорець.
Якщо ви хочете виключити або відфільтрувати певні повідомлення за назвою тегів у студії Android, перейдіть у вікно LogCat => Редагувати конфігурацію фільтра та введіть наступне у розділі "Тег журналу (регулярний вираз):"
^(?!(tag1|tag2|tag3|tag4))
Зауважте, що пробілів немає, це важливо
^(?!tag1)
^(?!.*(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*))
З оболонки ви можете використовувати команду типу:
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"
S
це "мовчати". Я оновив відповідь, щоб пояснити це, як ви пропонуєте.
Поєднуйте як позитивну, так і негативну позицію для більш потужної фільтрації.
Приклад:
(?=(AndroidRuntime|Main|RandomTag))(?!(Audio))
Теги в перші вкладені дужки включаються.
Теги в секунду виключаються.
Ось список фільтрів, які я використовував для ігнорування системних журналів 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))
У режимі перегляду Eclipse Logcat немає такої можливості. Однак ви можете використовувати рівень журналу, щоб виключити будь-яке повідомлення, рівень журналу якого занадто низький. E. g. встановивши його на I (nfo), не відображає повідомлення D (ebug) та (V), які мають ербозу.