Hola, por acá Danilo 👋
Bienvenido a esta nueva edición de Robotipy. En este artículo explicaremos como leer los logs de rocketbot, para que puedas entender los errores y puedas crear tus propios logs.
Si quieres recibir estas publicaciones desde tu correo electrónico, te invito a suscribirte.
Una de las habilidades más importantes y a la vez complicada al desarrollar, es saber como debuggear y resolver errores. Se dice que un programador pasa mas tiempo leyendo código que programando y en el mundo de RPA no es tan diferente
¿Que son los logs?
Los logs son un registro de todas las actividades que realiza tu robot y se genera cada vez que se ejecuta. En estos registros se guarda información de los comandos, errores y mensajes dejados por el desarrollador
En informática, se usa el término registro, log o historial de log para referirse a la grabación secuencial en un archivo o en una base de datos de todos los acontecimientos (eventos o acciones) que afectan a un proceso particular (aplicación, actividad de una red informática, etc.). De esta forma constituye una evidencia del comportamiento del sistema.
En Rocketbot, leer los logs es bastante sencillo y tenemos varias formas para hacerlo, podemos leerlos desde:
📟 Terminal de Rocketbot
📄 Archivo .log
🔌Addon Logs Viewer
Los tres métodos muestran la misma información. La diferencia es la forma en la que accedes a cada uno y como te muestra la información.
Logs de Rocketbot
Los logs de rocketbot se guardan en la carpeta rocketbot/logs y se separan en diferentes carpetas según la fecha de creación del archivo. Dentro de estas carpetas, encontrarás cada archivo nombrado según la hora de creación log_yyyymmdd_hhmmss.log
Si abres cualquier log, verás líneas como en la imagen de abajo donde cada línea es un registro de la ejecución de cada comando.
💡Este post está basado en las versiones de Rocketbot 2023 o superior. Puede haber diferencias con versiones anteriores.
Cada registro o línea dentro del archivo .log lo podemos dividir en 8 partes
🕧 Timestamp o fecha y hora de ejecución
📤 Origen del log — Este puede ser Rocketbot si es un log de un comando o robot_message si es un log generado por el robot
🎚️Tipo de log — Conocido también como nivel de error. Permite diferenciar si es un mensaje de debug, un warning, error, etc. Puedes revisar en la documentación de python Loggin-level
🤖 Nombre del robot ejecutado — Es el nombre del robot que contiene al comando que se está ejecutando
📏 Linea del comando en el robot — Es la línea donde se encuentra el comando que se ejecuta, tomando en cuenta el nivel de anidación
🏷️Grupo y Nombre interno del comando — Acá se indica el nombre y sección a nivel interno de rocketbot. El identificador que tiene rocketbot para sus servicios y comandos. Por ejemplo
rpaweb : sendkeyweb — sección web : comando enviar texto web
🪪 Identificador del comando en el robot — Este es el identificador único del comando dentro del robot. Es un uuid que te permite encontrar un comando específico
🎛️ Parámetros, datos e información del comando — Esta parte del log es variable y depende de la información del comando a ejecutar. La mayoría de los módulos muestran su información en formato diccionario de python y algunos comandos nativos lo muestran secuencial. Por ejemplo
El comando abrir navegador muestra primero el navegador que se abrirá y luego un diccionario con los parámetros ingresados:
chrome - {"url":"https://blog.robotipy.com/p/como-mejorar-como-rpa-developer","id_driver":"","profile":""}
El comando limpiar variables muestra un diccionario con todos los parámetros incluido el nombre del módulo y el identificador del comando:
{"module_name":"System++","module":"cleanVars","vars":"Iterable_Csv"}
Logs en la Terminal de Rocketbot
La terminal de rocketbot nos muestra más información que solo los logs, por lo que es importante conocer como funciona
La terminal de Rocketbot es esa ventana negra que se abre cuando ejecutas la aplicación o ejecutas un robot.
La información en esta terminal la podemos dividir en dos partes.
Información de Studio — Al iniciar, muestra información de la configuración de Rocketbot como el puerto, la ruta de los logs o información de tu licencia. Y mientras vas interactuando con Studio, va mostrando información, como el robot guardado, los robots exportados, etc
Información de la ejecución — Cuando ejecutas un robot, la terminal muestra ademas del log de cada comando, otro tipo de información, como el tiempo que demora en ejecutar el robot, warning generados por alguna librería de python, mensajes de debug de algún comando, entre otras cosas
Addon Log Viewer
Otra forma de visualizar los logs, es utilizando la extensión o addon llamado Logs Viewer. Esta extensión se encuentra en la sección de Addons, en la parte derecha de Rocketbot
Si das click en la extensión, se abrirá una nueva pestaña en el navegador con todos los logs separados por carpeta, de igual forma como se encuentra en la carpeta logs, ordenados desde el último al más antiguo.
Esta extensión, te permite ver cada tipo de log con diferentes colores para que puedas visualizar de forma rápida los errores o los logs generados por tu robot. Además, cuenta con dos botones para exportarlo como archivo xlsx y otro para abrir la carpeta logs.
Esta forma tiene la desventaja que no se actualiza en tiempo real, por lo que necesitas recargar la página cuando finalice la ejecución de tu robot
🙋♂️Si te interesa que haga un vídeo de como crear tus propios addons para Rocketbot Studio, dejame un comentario diciendo “Me interesa crear un addon”
Como crear un log personalizado
Desde la versión 2023.03.20, ya no necesitas crear tus propios módulos de logs o subrobots para crear mensajes de logs personalizados en tus robot.
Con el comando Mensaje Log, puedes agregar información a los logs de Rocketbot y así tener en un solo lugar tus registros o checkpoints con la información de los comandos ejecutados.
El comando Mensaje Log se encuentra en la sección Sistema y recibe solo dos parámetros para funcionar
Mensaje — El mensaje de que quieres escribir en los logs. Puede ser un texto o una variable
Nivel — El tipo de log que quieres que se muestre. Los niveles disponibles pueden ser :
trace: Utilizado para información detallada de depuración
info: Utilizado para proporcionar información general sobre la ejecución del programa
warn: Se utiliza para resaltar posibles problemas o advertencias
error: Utilizado para registrar errores que se producen durante la ejecución del programa
fatal: Se utiliza para registrar errores críticos que conducen a la finalización del programa
Al ejecutarse este comando, verás en los logs lo siguiente:
2023-08-22 00:22:08.100640 - rocketbot - INFO - request: test2 : line 2 - rpasystem : log_message id: 05886cd5-7a45-47f7-76eb-e95eb4590f72 - warn - Los archivos no se encuentran en la carpeta principal
2023-08-22 00:22:08.101642 - robot_message - WARN - Los archivos no se encuentran en la carpeta principal
Como guardar el error en una varible
En algunos casos podrías necesitas el mensaje del error que ocurre, ya sea para enviarlo por algún medio o tomar una decisión dentro de un catch.
En Rocketbot no tienes un comando para extraer el error literal, sino que puedes obtener el último status reportado por un comando y este contendrá el mensaje del error
{'status': 'False', 'message': 'SystemError: Ha ocurrido un error en el robot', 'img': '', 'vars': [], 'ifs': [], 'extra': [], 'time': '0.00956273078918457'}
Para poder obtener el status, puedes usar alguna de estas dos formas
Uso de variable interna
Con el comando asignar variable puedes utilizar la variable interna rocketbot_last_status.
Para poder utilizarla tienes que escribirla entre simbolos de porcentajes y en el campo de Asignar resultado a variable tienes que indicar el nombre de la variable donde guardar el mensaje con el error (o el último status)
Comando obtener último status
En este comando solo tienes que ingresar la variable donde quieres guardar el último status reportado por el comando y ya puedes acceder al mensaje del error.
Y eso es todo por hoy! Si te gustaría que escriba sobre algo en particular, creé un chat donde podemos conversar y puedes comentarme cuales son los temas que te interesan. Estaré escribiendo sobre los temas comentados en las siguientes ediciones