¿Cómo excluir ciertos mensajes por nombre de TAG usando Android adb logcat?

122

Logcat permite el filtrado de registros, pero funciona así: usted define filtros y logcat solo muestra mensajes que coinciden con los filtros. Pero, ¿hay alguna manera de mostrar todos los registros, EXCEPTO algunas etiquetas definidas por filtros?

Kostas
fuente
1
Publicación
RBT

Respuestas:

51

Si lo está utilizando adb logcat, puede canalizarlo a través de grep y utilizar su coincidencia invertida: Desde la página de manual de grep :

v, --invert-match Invierte el sentido de coincidencia, para seleccionar líneas no coincidentes.

Por ejemplo:

$adb logcat | grep --invert-match 'notshownmatchpattern' 

Puede extender esto usando expresiones regulares .

Aquí hay un ejemplo de tal expresión:

"/^(?:emails|tags|addresses)"

Este verificaría si se produce cualquiera de los dados, grep no los enumeraría.

Chris Polzer
fuente
1
@zest grepes un comando estándar de Unix. Para Windows puedes probar find /V "notshownmatchpattern". PD Aparentemente, el shell adb también tiene un grep. ¡Pero no es lo mismo que el Unix estándar grep!
PCoder
Sí, ya lo encontré, findtr - suck, posible instalar powershell o grep (para Windows :), lo mismo que Linux como se escribió en el archivo Léame, pero no tanto en la práctica)
Gennadiy Ryabkin
Sin inconvenientes, solo recomendaría que Windows instale git con las herramientas de línea de comandos de git. Esto instalaría todas las herramientas básicas de línea de comandos de Unix para windowze.
Chris Polzer
o instalar clink para herramientas comunes de línea de comandos de Unix en windowze
chris polzer
@PCoder, ¿puede escribir un comando completo para hacer lo mismo con Windows CMD?
Raghav Satyadev
217

Puede hacer esto desde DDMS Monitor (y también Eclipse o Android Studio) con el cuadro de entrada de expresión regular y aserciones negativas anticipadas , por ejemplo, estoy excluyendo mucho ruido de mi registro con lo siguiente:

tag:^(?!(WifiMulticast|WifiHW|MtpService|PushClient))

(La "etiqueta:" no es parte de la expresión regular, pero le dice a LogCat que solo aplique la expresión regular al campo Etiqueta. Si usa este truco en un filtro guardado, coloque solo la expresión regular en el cuadro de entrada "Etiqueta" , y omita el prefijo "tag:")

En el panel del monitor logcat de Android Studio, puede configurar un filtro guardado para esto abriendo el menú desplegable en la esquina superior derecha (puede tener "Mostrar solo la aplicación seleccionada" seleccionada) y seleccionando Editar configuración de filtro. Cree un nuevo filtro logcat y coloque ^(?!(WifiMulticast... etc. ))en el cuadro Etiqueta de registro, con la Regexcasilla marcada.

ZoFreX
fuente
Buena solución para Eclipse LogCat
Seraphim's
66
¡Mi visión es inmediatamente menos borrosa! : D
suomi35
Esto es lo que estoy buscando desde hace mucho tiempo
ar-g
Funcionó como encanto! Muchas gracias. Agregue la palabra "dalvikvm" también en ella. Es más molesto en logcat.
Atul
1
La respuesta con el filtro logcat es la correcta - stackoverflow.com/a/17468665/828237
kwesolowski
74

Si desea excluir o filtrar ciertos mensajes por nombre de etiqueta en Android Studio, vaya a la ventana LogCat => Editar configuración de filtro e ingrese lo siguiente en "por etiqueta de registro (regex):"

^(?!(tag1|tag2|tag3|tag4))

Tenga en cuenta que no hay espacios, esto es importante

Phileo99
fuente
esta respuesta funciona en logcat de Intellij 15> Editar configuración de filtro que muestra un modal titulado "Crear nuevo filtro de Logcat".
Petey
1
Gracias. Por cierto celulares de Lenovo tienen una gran cantidad de mensajes de registro de spam
Gaviota
Sin embargo, esto solo evita que los registros con esa etiqueta se procesen en el registro. El monitor todavía se inunda con esas llamadas en segundo plano y empuja las llamadas no "tag1 | tag2 | etc" fuera del búfer. ¿Hay alguna manera de evitar eso?
TheBestBigAl
La respuesta con el filtro logcat es la correcta - stackoverflow.com/a/17468665/828237
kwesolowski
O si una etiqueta^(?!tag1)
Vlad
34

^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$

Esto excluirá textos que tengan contenido WindowManager, dalvik, ...

tag:^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$

Esto excluirá las etiquetas WindowManager, dalvik, ... de logcat

Rinoceronte
fuente
Algunos más:^(?!(WifiMulticast|WifiHW|MtpService|PushClient|EGL_emulation|OpenGl*|InputReader|art|dalvik|Environment|DataRouter|AlarmManager|WindowManager|PhoneStatusBar|ActivityManager|ResourceType|PackageManager|gralloc*))
Gurupad Mamadapur
Y más: (Gnss | NetRec | ResolverController | GAv4 | AsyncOperation | AppOps | WificondControl | aofp | wifi | netmgr | ctxmgr | BestClock | FirebaseInstanceId | android.os.Debug | memtrack | netd | system_server | StrictMode | bluetooth | NetworkMonitor | ,.,. PContextMetricsRunner))
Graeme
32

Desde el shell, puede usar un comando como:

adb logcat AlarmManagerService:S PowerManagerService:S *:V

que incluirá todos los registros aparte de aquellos con las etiquetas AlarmManagerServicey PowerManagerService.

( :SSignifica "silencioso", lo que significa que no se imprimirá nada para esas etiquetas; :Vsignifica "detallado" que significa que todo se imprimirá para todas las demás etiquetas. La documentación de Android para logcat tiene más detalles de otras opciones que puede usar en los filtros)

También puede usar la ANDROID_LOG_TAGSvariable de entorno para configurar filtros predeterminados, por ejemplo (en bash):

export ANDROID_LOG_TAGS="AlarmManagerService:S PowerManagerService:S *:V"
Rico
fuente
Esta es una buena sugerencia y funciona desde la línea de comandos sin canalizaciones. Debería actualizar su respuesta en mi humilde opinión para explicar que la parte ": S" solo emitirá mensajes severos para los componentes nombrados (lo que casi nunca sucede). Nuevamente, buena respuesta. La gente debería votar este ...
Chris Markle
1
@ChrisMarkle Según los documentos, Ses para 'silencio'. Sin embargo, he actualizado la respuesta para explicar esto, como sugieres.
Rico
2
Puede filtrar la salida de logcat de la misma manera utilizando la variable de entorno ANDROID_LOG_TAGS. Me resulta útil tenerlo siempre configurado para excluir algunos de los procesos más spam.
Emidander
16

Combine la búsqueda anticipada positiva y negativa para un filtrado más potente.

Ejemplo:

(?=(AndroidRuntime|Main|RandomTag))(?!(Audio))

Se incluyen las etiquetas en los primeros paréntesis anidados.

Las etiquetas en segundo lugar están excluidas.

Panadero
fuente
En mi humilde opinión, esta es la forma más completa de filtrado de registros.
Ritesh Gune
4

Aquí hay una lista de filtros que he estado usando para ignorar los registros del sistema Samsung . funcionaría también con otros dispositivos.

Logcat -> Editar configuración de filtro -> Etiqueta de 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))
Ramesh Jaya
fuente
1

Una manera fácil de hacer esto es simplemente filtrando solo las etiquetas que desea ver.

adb logcat -s "Tag1" -s "Tag2" -s "Tag3"

Solo se mostrarán esas etiquetas.

Wintermute
fuente
0

Dentro de la vista Eclipse Logcat no existe tal opción. Sin embargo, puede utilizar el nivel de registro para excluir cualquier mensaje cuyo nivel de registro sea demasiado bajo. P.ej. establecerlo en I (nfo) no muestra mensajes erbose D (ebug) y (V).

Lars Blumberg
fuente
Bueno, olvidé mencionar que estoy usando eso en el símbolo del sistema / dentro de un teléfono para leer registros. Y cada vez que toco una pantalla, muestra los mensajes InputReader / InputDispatcher que están inundando la pantalla. Ahora también veo que configurar filtros para "InputReader: S InputDispatcher: S" funciona :) ¡Gracias por una respuesta!
Kostas