android adb logcat

android - adb shell Logcat con nombre del paquete



(3)

¿Es posible mostrar también el Nombre del paquete de registro en cada línea?
Utilizando

logcat -v largo

deja exactamente el campo del nombre del paquete (después del PID) vacío.
Quiero filtrar los registros de una aplicación específica con diferentes etiquetas, preguntándome si es posible.


Este es mi guión. Un poco oxidado pero sigue funcionando.

PID=`adb shell ps | grep -i <your package name> | cut -c10-15`; adb logcat | grep $PID

En realidad, tengo un script de Python para agregar más colores y un ciclo while para seguir monitoreando ese proceso cuando se reinicia, pero creo que entenderás el punto.


logcat registro logcat no tiene un "campo de nombre de paquete". Por lo tanto, no hay una forma estándar / integrada de filtrar por él.

Aunque desde Android 7.0 puede usar la opción logcat --pid combinada con el comando pidof -s para filtrar la salida por nombre binario / paquete:

adb shell "logcat --pid=$(pidof -s <package_name>)"

Reemplace " con '' para Linux / MacOS


Opción 1

Ingrese estos línea por línea:

adb shell su bash PKG_PID_LIST_CACHE=$(eval $(pm list packages | cut -d '':'' -f 2 | sed ''s/^/(.*/)$/echo /"/$/(echo /1/) /$/(pidof /1/)/";/'')) PROC_PID_LIST_CACHE=$(ps -A -o NAME -o PID) PID_LIST_CACHE=$(echo "$PKG_PID_LIST_CACHE/n$PROC_PID_LIST_CACHE") function pid2pkg() { pkgName=$(echo "$PID_LIST_CACHE" | grep -w $1 | cut -d '' '' -f1 | head -1); if [ "$pkgName" != "" ] ; then echo $pkgName; else echo "*NOT RUNNING*"; fi } eval "$(logcat -d | sed -r -e ''s/([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +(.*)//2 /$/(pid2pkg /3/) /5/g'' | sed -r -e ''s/(.+)/echo -e /"/1/"/g'')"

La salida de logcat tendrá el siguiente formato:

[Time] [Name] [Type] [Message]

Ejemplo:

14:34:59.386 wpa_supplicant E wpa_supplicant: nl80211: Failed to set IPv4 unicast in multicast filter 14:35:02.231 com.android.phone D TelephonyProvider: subIdString = 1 subId = 1 14:35:03.469 [email protected] E WifiHAL : wifi_get_logger_supported_feature_set: Error -3 happened. 14:35:03.518 system_server I WifiService: getWifiApEnabledState uid=10086 14:35:03.519 dev.ukanth.ufirewall D AFWall : isWifiApEnabled is false 14:35:03.520 system_server I GnssLocationProvider: WakeLock released by handleMessage(UPDATE_NETWORK_STATE, 0, 123) 14:35:03.522 dev.ukanth.ufirewall I AFWall : Now assuming wifi connection

Algunos procesos del sistema no tienen paquetes. system_server y wpa_supplicant por ejemplo. Si no se puede encontrar el nombre de un paquete, se mostrará el nombre del proceso.

Advertencias :

Si el proceso detrás de cierto PID ya no se ejecuta, ya no puede obtener el nombre del paquete / proceso.

Después de que un proceso salga o que su dispositivo se reinicie, los PID pueden asignarse a procesos completamente diferentes.

Por lo tanto, es posible que desee comprobar durante cuánto tiempo se ha estado ejecutando el proceso:

ps -e -o pid -o stime -o name

opcion 2

Si desea que el formato sea un poco más legible, puede copiar mi script de registro en su dispositivo y ejecutarlo:

better_logging.sh

PKG_PID_LIST_CACHE=$(eval $(pm list packages | cut -d '':'' -f 2 | sed ''s/^/(.*/)$/echo /"/$/(echo /1/) /$/(pidof /1/)/";/'')) PROC_PID_LIST_CACHE=$(ps -A -o NAME -o PID) PID_LIST_CACHE=$(echo "$PKG_PID_LIST_CACHE/n$PROC_PID_LIST_CACHE") MAX_LEN=$(echo "$PID_LIST_CACHE" | cut -d '' '' -f1 | awk ''{ if ( length > L ) { L=length} }END{ print L}'') function pid2pkg() { pkgName=$(echo "$PID_LIST_CACHE" | grep -w $1 | cut -d '' '' -f1 | head -1); if [ "$pkgName" != "" ] ; then printf "%-${MAX_LEN}s" "$pkgName"; else printf "%-${MAX_LEN}s" "<UNKNOWN (NOT RUNNING)>"; fi } eval "$(/ logcat -d | / sed -r -e ''s/([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +(.*)//2/ $/(pid2pkg /3/) /5/g'' | / sed -r -e ''s/(.+)/echo -e /"/1/"/g'' / )" | / awk '' function color(c,s) { printf("/033[%dm%s/033[0m/n",90+c,s) } / E / {color(1,$0);next} / D / {color(2,$0);next} / W / {color(3,$0);next} / I / {color(4,$0);next} {print} ''

Para copiarlo y ejecutarlo, puede usar:

adb push better_logging.sh /sdcard/better_logging.sh adb shell "bash /sdcard/better_logging.sh"

La salida se verá así: