miércoles, 18 de julio de 2012

Logging/troubleshooting en android

La versión Evolution 2 de Genexus incluye generadores para iOS (iPad, iPhone e iPod), Android (Galaxy, etc) y Blackberry (RIM).

En particular ahora estaba desarrollando una aplicación para Android y tuve algun problema dificil de identificar. Usando una herramienta para procesar el "log" de la aplicación pude encontrar y corregir rapidamente el problema.

Independientemente de que se tenga o no problema, el manejar el "logging" puede ayudar en optimizaciones, chequear qué servicios se están consumiendo desde la aplicación, qué datos viajan, etc.


Funcionamiento de log en Android

Las aplicaciones en Android envian mensajes a un "log genérico" del device con diferentes niveles (info,warning, error, etc), el cual se va almacenando en el propio dispositivo.
Luego hay herramientas para leer/filtrar, etc ese log.
Es decir, no es un log "especifico" de las aplicaciones Genexus sino que simplemente las aplicaciones Genexus envian mensajes "estándar" a ese log.

CatLog

En particular yo use CatLot que permite visualizar, filtrar, salvar, salvar, etc la info toda o parte de la info que está en ese log:



¿Cómo usarlo con apps Genexus?

Como hay mucha información en el log lo que a mi me resultó más práctico es:
1. Identificar los mensajes de mi aplicación
2. Filtrar y/o salvar los mismos y luegos enviarlos por mail
3. Procesarlos en el PC.


1. Identificar los mensajes de mi aplicación

Si la aplicación está ejecutando estará enviando mensajes al log, por lo cual para encontrar los mensajes de mi aplicación lo que puedo hacer es usar el "search" y buscar por ejemplo "Genexus" o "GenexusApplication":

Una vez que identifiqué algun mensaje hago un "long tap" sobre uno de ellos y aparece un popup que me permite buscar por "process id" (o sea, no solo los mensajes que digan "GenexusApplication" sino todos los mensajes de mi aplicación):


Ahi aparecerán entonces todos los mensajes de mi aplicación:


2. Filtrar/Enviar por mail

Una vez que tengo la lista de mensajes de mi aplicación, los puedo filtrar por otros criterios (nivel: error, warning, etc), salvar el log, etc.
Yo normalmente lo que hago es salvar el log entero de mi aplicación y enviarmelo por mail (el Catlog tiene esas opciones).

3. Procesarlos en el PC

Teniendo el log en mi PC es más práctico para procesarlo. Ahi dependiendo el problema o lo que quiera hacer es como sigo, puedo buscar por el nombre de un objeto, por "error", etc.

En fin, depende del escenario.

Por ejemplo: para ver qué servicios REST se están consumiendo, con qué parámetros, etc.

Un ejemplo de un tramo de log: URI='http://labs.genexus.com:8080/Vdir/rest/WorkWithDevicesCompany_Company_Section_General?CompanyId=13820&fmt=json'> 11-09 22:22:22.375 D/EntityService(566): Task DEQUEUE: 11-09 22:22:22.375 I/GeneXusApplication(566): GetData from http://labs.genexus.com:8080/Vdir/rest/WorkWithDevicesCompany_Company_Detail?CompanyId=13820&fmt=json

Si en mi caso tengo problemas accediendo a ese servicio desde el device, entonces copiando esa misma URL (http://labs.genexus.com:8080/Vdir/rest/WorkWithDevicesCompany_Company_Detail?CompanyId=13820&fmt=json) en un Browser puedo ver si desde el PC está accesible y qué está devolviendo el server.

También podria acceder a ese servicio desde el propio Browser del Device para ver si desde el device está accesible, etc, etc.

En fin, lo antes dicho: depende de lo que busco.

¿Está solo disponible en el Device?

No, también se puede usar con el emulador. Funciona de modo similar.

Para hacerlo ejecutarlo: 
1. En un command prompt ejecutar:c:\directorio_donde_esta_SDK\platform-tools\adb logcat > log.txt
2. Ejecutar la aplicación (F5 en Genexus)
3. Cuando se quiera para el "log" se da Ctrl+C en el command prompt y "corta" el log

En el archivo log.txt queda toda la información.

4 comentarios:

  1. En este otro post hay algo similar pero para IOS: http://tips.genexus.com/2012/07/ios-ver-interaccion-entre-dispositivo-y.html

    ResponderEliminar
  2. Hay una forma práctica de acceder a ese mismo log directamente desde el PC. Sirve para cuando estas utilizando el emulador o dispositivo conectado al PC.

    Es ejecutando este utilitario:
    C:\\tools\ddms.bat

    Luego seleccionas el device/emulador que aparece en la lista y ya aparece todo el stack de llamadas.

    Pablo Mazzilli

    ResponderEliminar
  3. Quedo mal la ruta en el comentario anterior, es el directorio Tools debajo de la instalación del SDK de Android.

    ResponderEliminar
  4. Gracias pablo. Si, el DDMS yo lo uso para capturar las pantallas del device cuando lo tengo conectado.

    ResponderEliminar