Como excluir determinadas mensagens pelo nome TAG usando o Android adb logcat?

122

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?

Kostas
fonte

Respostas:

51

Se você estiver usando, adb logcatvocê 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.

chris polzer
fonte
1
@zest 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!
PCoder
Sim, eu já o encontrei, findstr - suck, possível instalar o powershell ou grep (para windows :), o mesmo que o Linux, como foi escrito em leia-me, mas não tanto na prática)
Gennadiy Ryabkin
Sem adays, eu gostaria de adivce para o Windows instalar o git com ferramentas de linha de comando git. Isso instalaria todas as ferramentas básicas de linha de comando unix para o windowze.
chris Polzer
ou instalar tilintar de ferramentas comuns de linha de comando unix em windowze
chris Polzer
@PCoder, por favor, escreva todo o comando para fazer o mesmo com o Windows CMD?
Raghav Satyadev
217

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 Regexcaixa de seleção marcada.

ZoFreX
fonte
Boa solução para Eclipse LogCat
Seraphim
6
Minha visão é imediatamente menos embaçada! : D
suomi35
Isto é o que estou procurando há um bom tempo
ar-g
Trabalhou como charme! Muito Obrigado. Adicione a palavra "dalvikvm" também. É muito chato no logcat.
Atul
1
Resposta com filtragem logcat é o correto - stackoverflow.com/a/17468665/828237
kwesolowski
74

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

Phileo99
fonte
esta resposta funciona no logcat de intellij 15> Editar configuração do filtro, que exibe um modal intitulado "Criar novo filtro de logcat".
petey 23/02
1
Obrigado. Btw telefones Lenovo tem um monte de mensagens de log de spam
Seagull
Porém, isso evita que os logs com essa tag sejam renderizados no log. O monitor ainda é inundado com essas chamadas em segundo plano e empurra as chamadas não "tag1 | tag2 | etc" para fora do buffer. Existe uma maneira de contornar isso?
TheBestBigAl
Resposta com filtragem logcat é o correto - stackoverflow.com/a/17468665/828237
kwesolowski
Ou se uma tag^(?!tag1)
Vlad
34

^(?!.*(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

Rino
fonte
Um pouco mais:^(?!(WifiMulticast|WifiHW|MtpService|PushClient|EGL_emulation|OpenGl*|InputReader|art|dalvik|Environment|DataRouter|AlarmManager|WindowManager|PhoneStatusBar|ActivityManager|ResourceType|PackageManager|gralloc*))
Gurupad Mamadapur 11/03/18
E mais: (Gnss | NetRec | ResolverController | GAv4 | AsyncOperation | AppOps | WificondControl | aofp | wifi | netmgr | ctxmgr | BestClock | FirebaseInstanceId | android.os.Debug | memtrack | netd | system_server | StrictMode | bluetooth | Network BroadcastQueue | ConnextivityService | WakeLock | HttpClientWrapper | RAWR | Tenor | BgTask | WifiService | BluetoothAdapter | UpdateStatsService | AppIdleHistory | Conectividade | VelvetNetworkClient | WorkerManager | WorkerManager | EGL_emulation | chatty | gralloc | PContextMetricsRunner))
Graeme
32

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 AlarmManagerServicee PowerManagerService.

( :SSignifica "silencioso", o que significa que nada será impresso para essas tags; :Vsignifica "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_TAGSvariável de ambiente para configurar filtros padrão, por exemplo (no bash):

export ANDROID_LOG_TAGS="AlarmManagerService:S PowerManagerService:S *:V"
Rico
fonte
Essa é uma boa sugestão e funciona a partir da linha de comando sem pipelines. Você deve atualizar sua resposta imho para explicar que a parte ": S" emitirá apenas mensagens graves para os componentes nomeados (o que quase nunca acontece). Mais uma vez, boa resposta. As pessoas deveriam votar neste ...
Chris Markle
1
@ ChrisMarkle De acordo com os documentos, o Sé para 'silencioso'. Atualizei a resposta para explicar isso, como você sugere.
Ricos
2
Você pode filtrar a saída do logcat da mesma maneira usando a variável de ambiente ANDROID_LOG_TAGS. Acho útil configurá-lo sempre para excluir alguns dos processos com mais spam.
Emidander
16

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.

padeiro
fonte
IMHO, Esta é a maneira mais abrangente de filtrar logs.
Ritesh Gune
4

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))
Ramesh Jaya
fonte
1

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.

Wintermute
fonte
0

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.

Lars Blumberg
fonte
Bem, eu esqueci de mencionar que estou usando isso no prompt de comando / dentro de um telefone para ler logs. E cada vez que toco em uma tela, ele mostra mensagens InputReader / InputDispatcher que estão apenas inundando a tela. Agora vejo também a configuração de filtros para "InputReader: S InputDispatcher: S" funciona :) Obrigado por uma resposta!
Kostas