Logcat consente di filtrare i log ma funziona in questo modo: definisci i filtri e logcat visualizza solo i messaggi che corrispondono ai filtri. Ma c'è un modo per visualizzare tutti i log TRANNE alcuni TAG definiti dai filtri?
Logcat consente di filtrare i log ma funziona in questo modo: definisci i filtri e logcat visualizza solo i messaggi che corrispondono ai filtri. Ma c'è un modo per visualizzare tutti i log TRANNE alcuni TAG definiti dai filtri?
Risposte:
Se lo stai usando, adb logcat
puoi reindirizzarlo attraverso grep e usare la sua corrispondenza invertita: Dalla pagina di manuale di grep :
v, --invert-match Inverte il senso della corrispondenza, per selezionare le linee non corrispondenti.
Per esempio:
$adb logcat | grep --invert-match 'notshownmatchpattern'
Puoi estenderlo usando espressioni regolari .
Ecco un esempio di tale espressione:
"/^(?:emails|tags|addresses)"
Questo verifica che si verifichi uno dei dati, grep non li elenca.
grep
è un comando unix standard. Per Windows puoi provare find /V "notshownmatchpattern"
. PS Apparentemente, la shell adb ha anche un file grep
. Ma non è lo stesso dell'unix standard grep
!
Puoi farlo da DDMS Monitor (e anche Eclipse o Android Studio) con la casella di input dell'espressione regolare e le asserzioni anticipate negative , ad esempio sto escludendo molto rumore dal mio registro con quanto segue:
tag:^(?!(WifiMulticast|WifiHW|MtpService|PushClient))
(Il "tag:" non fa parte dell'espressione regolare, ma dice a LogCat di applicare la regex solo al campo Tag. Se utilizzi questo trucco in un filtro salvato, inserisci solo l'espressione regolare nella casella di input "Tag" e ometti il prefisso "tag:")
Nel pannello di monitoraggio logcat di Android Studio, puoi impostare un filtro salvato per questo aprendo il menu a discesa in alto a destra (potrebbe avere selezionato "Mostra solo applicazione selezionata") e selezionando Modifica configurazione filtro. Crea un nuovo filtro logcat e metti ^(?!(WifiMulticast
... ecc. ))
nella casella Log Tag, con la Regex
casella di controllo selezionata.
Se desideri escludere o filtrare determinati messaggi in base al nome del tag in Android Studio, vai alla finestra LogCat => Modifica configurazione filtro e inserisci quanto segue in "per tag di log (regex):"
^(?!(tag1|tag2|tag3|tag4))
Nota che non ci sono spazi, questo è importante
^(?!tag1)
^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$
Questo escluderà i testi con contenuti WindowManager, dalvik, ...
tag:^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$
Questo escluderà i tag WindowManager, dalvik, ... da logcat
^(?!(WifiMulticast|WifiHW|MtpService|PushClient|EGL_emulation|OpenGl*|InputReader|art|dalvik|Environment|DataRouter|AlarmManager|WindowManager|PhoneStatusBar|ActivityManager|ResourceType|PackageManager|gralloc*))
Dalla shell, puoi usare un comando come:
adb logcat AlarmManagerService:S PowerManagerService:S *:V
che includerà tutti i registri tranne quelli con i tag AlarmManagerService
e PowerManagerService
.
(L' :S
acronimo "silenzioso", che significa che non verrà stampato nulla per quei tag; l' :V
acronimo di "verbose" che significa che tutto verrà stampato per tutti gli altri tag. La documentazione di Android per logcat ha più dettagli di altre opzioni che puoi usare in i filtri.)
Puoi anche usare la ANDROID_LOG_TAGS
variabile d'ambiente per impostare filtri predefiniti, ad esempio (in bash):
export ANDROID_LOG_TAGS="AlarmManagerService:S PowerManagerService:S *:V"
S
significa "silenzioso". Tuttavia, ho aggiornato la risposta per spiegarlo, come suggerisci.
Combina lookahead positivo e negativo per un filtraggio più potente.
Esempio:
(?=(AndroidRuntime|Main|RandomTag))(?!(Audio))
I tag nelle prime parentesi nidificate sono inclusi.
I tag al secondo sono esclusi.
Ecco un elenco di filtri che ho utilizzato per ignorare i registri di sistema Samsung . funzionerebbe anche con altri dispositivi.
Logcat -> Modifica configurazione filtro -> Tag di registro
^(?!(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))
Un modo semplice per farlo è semplicemente filtrando solo i tag che vuoi vedere.
adb logcat -s "Tag1" -s "Tag2" -s "Tag3"
Visualizzerà solo quei tag.
All'interno della visualizzazione Eclipse Logcat non esiste tale opzione. Tuttavia è possibile utilizzare il livello di registro per escludere qualsiasi messaggio il cui livello di registro è troppo basso. Per esempio. impostandolo su I (nfo) non vengono visualizzati i messaggi D (ebug) e (V) erbose.