Logcat autorise le filtrage des journaux, mais son fonctionnement est le suivant: vous définissez des filtres et logcat affiche uniquement les messages qui correspondent aux filtres. Mais existe-t-il un moyen d'afficher tous les journaux SAUF certains TAG définis par des filtres?
Si vous utilisez adb logcat
vous pouvez le diriger vers grep et utiliser la correspondance inversée: depuis le page de manuel de grep :
v, --invert-match Inverse le sens de la concordance pour sélectionner des lignes non concordantes.
Par exemple:
$adb logcat | grep --invert-match 'notshownmatchpattern'
Vous pouvez étendre cela en utilisant expressions régulières .
Voici un exemple d'une telle expression:
"/^(?:emails|tags|addresses)"
Celui-ci vérifierait si l'un des événements donnés se produisait, alors grep ne les listerait pas.
Vous pouvez le faire depuis le moniteur DDMS (et également avec Eclipse ou Android Studio) avec le champ de saisie des expressions régulières et assertions d'anticipation négatives , par exemple, j'exclue beaucoup de bruit de mon journal avec ce qui suit:
tag:^(?!(WifiMulticast|WifiHW|MtpService|PushClient))
(La "balise:" ne fait pas partie de l'expression régulière, mais indique à LogCat de n'appliquer que l'expression rationnelle au champ Balise. Si vous utilisez cette astuce dans un filtre enregistré, placez simplement l'expression régulière dans la zone de saisie "Balise". et omettez le préfixe "tag:"
Dans Android de Studio, vous pouvez configurer un filtre enregistré à cet effet en ouvrant la liste déroulante dans le coin supérieur droit (l'option "Afficher uniquement l'application sélectionnée" peut être sélectionnée) et en sélectionnant Modifier la configuration du filtre. Créez un nouveau filtre logcat et mettez ^(?!(WifiMulticast
...etc. ))
dans la zone Balise de journal, avec la case à cocher Regex
cochée.
Si vous souhaitez exclure ou filtrer certains messages par nom de balise dans Android studio, accédez à la fenêtre LogCat => Modifier la configuration du filtre et entrez les informations suivantes sous "by Log Tag (regex):"
^(?!(tag1|tag2|tag3|tag4))
Notez qu'il n'y a pas d'espaces, c'est important
^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$
Cela exclura les textes ayant le contenu WindowManager, Dalvik, ...
tag:^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$
Cela exclura les balises WindowManager, dalvik, ... de logcat
À partir du shell, vous pouvez utiliser une commande telle que:
adb logcat AlarmManagerService:S PowerManagerService:S *:V
qui inclura tous les journaux en dehors de ceux avec les balises AlarmManagerService
et PowerManagerService
.
(Le :S
signifie "silencieux", ce qui signifie que rien ne sera imprimé pour ces balises; le :V
signifie "verbose", ce qui signifie que tout sera imprimé pour toutes les autres balises. Le documentation Android de logcat contient plus de détails sur les autres options que vous pouvez utiliser dans les filtres.)
Vous pouvez aussi utiliser le Android_LOG_TAGS
variable d’environnement pour configurer les filtres par défaut, par ex. (en bash):
export Android_LOG_TAGS="AlarmManagerService:S PowerManagerService:S *:V"
Combinez les résultats positifs et négatifs pour un filtrage plus puissant.
Exemple:
(?=(AndroidRuntime|Main|RandomTag))(?!(Audio))
Les balises dans les premières parenthèses imbriquées sont incluses.
Les balises en seconde sont exclues.
Voici une liste de filtres que j'ai utilisés pour ignorer les journaux système Samsung. fonctionnerait avec d'autres appareils aussi.
Logcat -> Modifier la configuration du filtre -> Balise de journal
^(?!(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|[email protected]|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))
Pour ce faire, il vous suffit de filtrer uniquement les balises que vous souhaitez voir.
adb logcat -s "Tag1" -s "Tag2" -s "Tag3"
N'amènera que ces balises.
Dans la vue Eclipse Logcat, cette option n'existe pas. Cependant, vous pouvez utiliser le niveau de journalisation pour exclure tout message dont le niveau de journalisation est trop bas. Par exemple. en le réglant sur I(nfo) ne présente pas les messages D(ebug) et (V) erbose ".