O Logcat permite filtrar logs, mas funciona da seguinte maneira: você define filtros e o logcat exibe apenas mensagens que correspondem aos filtros. Mas existe uma maneira de exibir todos os logs, EXCETO alguns TAGs definidos por filtros?
O Logcat permite filtrar logs, mas funciona da seguinte maneira: você define filtros e o logcat exibe apenas mensagens que correspondem aos filtros. Mas existe uma maneira de exibir todos os logs, EXCETO alguns TAGs definidos por filtros?
Respostas:
Se você estiver usando, adb logcat
você pode canalizá-lo através do grep e usá-lo na correspondência invertida: Na página de manual do grep :
v, --invert-match Inverte o senso de correspondência, para selecionar linhas não correspondentes.
Por exemplo:
$adb logcat | grep --invert-match 'notshownmatchpattern'
Você pode estender isso usando expressões regulares .
Aqui está um exemplo dessa expressão:
"/^(?:emails|tags|addresses)"
Este verificaria se algum dos dados ocorria, o grep não os listaria.
grep
é um comando unix padrão. Para janelas, você pode tentar find /V "notshownmatchpattern"
. PS Aparentemente, o shell adb também possui um grep
. Mas não é o mesmo que o unix padrão grep
!
Você pode fazer isso no DDMS Monitor (e também no Eclipse ou Android Studio) com a caixa de entrada de expressão regular e declarações negativas de antecipação , por exemplo, estou excluindo muito ruído do meu log com o seguinte:
tag:^(?!(WifiMulticast|WifiHW|MtpService|PushClient))
(A "tag:" não faz parte da expressão regular, mas diz ao LogCat para aplicar apenas a regex ao campo Tag. Se você usar esse truque em um filtro salvo, coloque apenas a expressão regular na caixa de entrada "Tag" e omita o prefixo "tag:")
No painel de monitor de logcat do Android Studio, você pode configurar um filtro salvo para isso, abrindo o menu suspenso no canto superior direito (pode ter "Mostrar apenas o aplicativo selecionado" selecionado) e selecionando Editar configuração do filtro. Crie um novo filtro de logcat e coloque ^(?!(WifiMulticast
... etc. ))
na caixa Tag de log, com a Regex
caixa de seleção marcada.
Se você deseja excluir ou filtrar determinadas mensagens pelo nome da tag no Android studio, vá para a janela LogCat => Editar configuração do filtro e digite o seguinte em "pela tag de log (regex):"
^(?!(tag1|tag2|tag3|tag4))
Observe que não há espaços, isso é importante
^(?!tag1)
^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$
Isso excluirá textos com conteúdo WindowManager, dalvik, ...
tag:^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$
Isso excluirá as tags WindowManager, dalvik, ... do logcat
^(?!(WifiMulticast|WifiHW|MtpService|PushClient|EGL_emulation|OpenGl*|InputReader|art|dalvik|Environment|DataRouter|AlarmManager|WindowManager|PhoneStatusBar|ActivityManager|ResourceType|PackageManager|gralloc*))
No shell, você pode usar um comando como:
adb logcat AlarmManagerService:S PowerManagerService:S *:V
que incluirá todos os logs além daqueles com as tags AlarmManagerService
e PowerManagerService
.
( :S
Significa "silencioso", o que significa que nada será impresso para essas tags; :V
significa "verboso", o que significa que tudo será impresso para todas as outras tags. A documentação do Android para logcat possui mais detalhes de outras opções que você pode usar em os filtros.)
Você também pode usar a ANDROID_LOG_TAGS
variável de ambiente para configurar filtros padrão, por exemplo (no bash):
export ANDROID_LOG_TAGS="AlarmManagerService:S PowerManagerService:S *:V"
S
é para 'silencioso'. Atualizei a resposta para explicar isso, como você sugere.
Combine visuais positivos e negativos para uma filtragem mais poderosa.
Exemplo:
(?=(AndroidRuntime|Main|RandomTag))(?!(Audio))
Marcas nos primeiros parênteses aninhados estão incluídas.
Tags no segundo são excluídas.
Aqui está uma lista de filtros que eu tenho usado para ignorar os logs do sistema Samsung . também funcionaria com outros dispositivos.
Logcat -> Editar configuração do filtro -> Tag de log
^(?!(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))
Uma maneira fácil de fazer isso é filtrar apenas as tags que você deseja ver.
adb logcat -s "Tag1" -s "Tag2" -s "Tag3"
Irá exibir apenas essas tags.
Na visualização Eclipse Logcat, não existe essa opção. No entanto, você pode usar o nível de log para excluir qualquer mensagem cujo nível de log seja muito baixo. Por exemplo. configurá-lo para I (nfo) não exibe as mensagens D (ebug) e (V) erbose.