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

Logcat permite filtrar registros, pero funciona así: usted define los filtros y Logcat solo muestra los mensajes que coinciden con los filtros. ¿Pero hay una manera de mostrar todos los registros EXCEPTO algunos TAG definidos por filtros?

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

v, –invert-match Invertir el sentido de coincidencia, para seleccionar líneas que no coinciden.

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)" 

Éste verificaría que ocurriera cualquiera de las opciones dadas, grep no las enumeraría.

Puede hacerlo desde DDMS Monitor (y también Eclipse o Android Studio) con el recuadro de entrada de expresión regular y aserciones negativas de búsqueda anticipada ; por ejemplo, excluyo 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, ponga solo la expresión regular en el cuadro de entrada “Etiqueta” y omita el prefijo “etiqueta:”)

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 seleccionada la opción “Mostrar solo la aplicación seleccionada”) y seleccionar Editar configuración de filtro. Cree un nuevo filtro de logcat y coloque ^(?!(WifiMulticast … etc. )) En el cuadro Etiqueta de registro, con la checkbox Regex marcada.

Si desea excluir o filtrar ciertos mensajes por nombre de etiqueta en Android studio, vaya a LogCat window => Edit Filter configuration, e ingrese lo siguiente debajo de “por Log Tag (regex):”

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

Tenga en cuenta que no hay espacios, esto es importante

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

Esto excluirá textos con contenido WindowManager, dalvik, …

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

Esto excluirá las tags WindowManager, dalvik, … de logcat

Desde el shell, puedes usar un comando como:

 adb logcat AlarmManagerService:S PowerManagerService:S *:V 

que incluirá todos los registros aparte de aquellos con las tags AlarmManagerService y AlarmManagerService .

(El :S significa “silencioso”, lo que significa que no se imprimirá nada para esas tags; el :V significa “verboso”, lo que significa que todo se imprimirá para todas las demás tags. La documentación de Android para logcat tiene más detalles de otras opciones puedes usar en los filtros)

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

 export ANDROID_LOG_TAGS="AlarmManagerService:S PowerManagerService:S *:V" 

Combina las previsiones positivas y negativas para un filtrado más potente.

Ejemplo:

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

Las tags en el primer paréntesis nested están incluidas.

Las tags en el segundo están excluidas.

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

Una manera fácil de hacerlo es simplemente filtrando solo las tags que desea ver.

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

Traerá solo esas tags.