Logs são cruciais, pois ajudam no gerenciamento da aplicação, nos permitindo ter insights sobre o comportamento da aplicação, os erros, as exceções e quais foram as tarefas realizadas. No contexto de automação RPA, a integração de logs é essencial para ajudar na transparência e proporcionar suporte para solucionar problemas de forma eficiente. Neste artigo, exploraremos o uso de logs em automações RPA, destacando a importância de sua implementação e exemplos de como fazer isso com Python, uma linguagem de programação de grande importância nessa área de desenvolvimento.
Logs em Python
Logs em Python pode ser um importante apoio na hora de desenvolver a sua automação RPA, visto que a linguagem Python pode ser uma escolha inteligente, devido a popularidade e simplicidade da linguagem, além do vasto suporte e disponibilidade de bibliotecas e frameworks que podem facilitar o processo de desenvolvimento.
Saiba mais sobre as vantagens do Python para RPA: comparação de Python RPA vs Low-code.
Log pode ser um registro cronológico de ações e eventos que podem acontecer dentro da sua automação. Esse mesmo log pode ser de diversos tipos e até mesmo retornar informações que sejam necessárias para a compreensão do que estava acontecendo naquele determinado momento e o motivo.
Tipos de Logs em RPA
Logs em RPA podem variar, de acordo com a realidade do negócio. Por isso é importante entender quais são os tipos de logs que seu time precisa considerar para a automação:
- Logs de execução: Esses logs referem-se ao que está sendo executado no código desenvolvido para seu projeto RPA. Podem ser, por exemplo, as “exceptions”, que são os erros técnicos que aconteceram;
- Logs de segurança: Esses logs têm contexto mais específico sobre a segurança da sua automação, pois ela também é um projeto de software e é importante considerar a qualidade e segurança do código e das informações trafegadas em cada etapa de execução;
- Logs relacionados ao negócio: Esses logs têm contexto do processo que está sendo executado pelo robô, contendo informações como qual tarefa foi executada, em qual etapa o robô está em determinado momento, quais são os dados etc.;
- Entre outros.
Estrutura de logs em Python para automação RPA
A estrutura desses logs podem variar de acordo com a necessidade e os requisitos do negócio a ser atendido. Porém é importante ter pelo menos a data e horário do ocorrido, a mensagem correspondente ao evento, alguma identificação que tenha relação com o contexto, entre outros.
Como desenvolver e consultar os logs em RPA?
Agora vamos para a parte prática. Nos próximos tópicos, vamos acompanhar um exemplo de como desenvolver seus logs utilizando o framework Python da BotCity e como disponibilizar seus logs para serem acompanhados pelo seu time e sua gestão, utilizando o BotCity Orquestrador.
No Orquestrador você pode criar logs independentemente das outras entidades da arquitetura das automações. E para conectá-la ao nosso robô, podemos utilizar o BotCity Maestro SDK.
Exemplo de robô para desenvolver os logs
Como exemplo, vamos utilizar um robô desenvolvido em Selenium e Python que realiza login na página Practice Test Automation. O robô deverá abrir a página, fazer o login, confirmar que o login aconteceu e, em seguida, fazer o logout e confirmar que funcionou. Caso queira seguir o mesmo exemplo, crie uma pasta no seu computador e, dentro dela, adicione:
- um arquivo chamado requirements.txt;
- um arquivo chamado bot.py;
- o webdriver de acordo com o seu navegador.
Arquivo requirements.txt com as dependências e bibliotecas:
selenium==4.10.0 webdriver-manager==3.8.5
Arquivo bot.py com o código principal:
from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.firefox.service import Service # using as constants for example only # in a real scenario, this should be passed as parameters or using credentials feature USERNAME = "student" PASSWORD = "Password123" def main(): try: # set WebDriver path service = Service(executable_path=r"geckodriver.exe") # create a bot instance bot = webdriver.Firefox(service=service) # access the page Practice Test Automation bot.get("https://practicetestautomation.com/practice-test-login/") # search for the element input to add username input_username = bot.find_element(By.ID, "username") # add the username input_username.send_keys(USERNAME) # search for the password element input_password = bot.find_element(By.ID, "password") # add the password input_password.send_keys(PASSWORD) # search for the button element input_button = bot.find_element(By.ID, "submit") # click on the button input_button.click() # wait 3 seconds to ensure that the page opened sleep(3) # search for the login confirmation logged = bot.find_element(By.CSS_SELECTOR, ".post-title") # print confirmation text print(logged.text) # search for the logout button element logout = bot.find_element(By.CSS_SELECTOR, ".wp-block-button__link") # click on the button logout.click() # search for the login title to ensure that the logout finished bot.find_element(By.CSS_SELECTOR, "#login > h2:nth-child(1)") except Exception as ex: # search for the element with the error message error_alert = bot.find_element(By.ID, "error") # print the error message and stacktrace print(error_alert.text) print(ex) finally: # close the browser bot.quit() # print the message print("Finally") if __name__ == "__main__": main()
Antes de executar o código, lembre-se de que você deve instalar as dependências com o seguinte comando no seu terminal, dentro da pasta do projeto:
python -m pip install --upgrade -r requirements.txt
Para que você possa ter usuário e senha protegidos para utilizar na sua automação, conforme indicado nos comentários do código, siga as instruções da documentação sobre credenciais.
Como adicionar o framework da BotCity ao projeto Selenium
Você pode fazer a instalação conforme o comando a seguir:
pip install botcity-maestro-sdk
No arquivo das dependências, o requirements.txt, vamos adicionar a biblioteca: botcity-maestro-sdk. E no código do arquivo bot.py, vamos adicionar a seguinte importação:
from botcity.maestro import *
No código principal, do arquivo bot.py, vamos criar a instância do BotCity Maestro SDK:
def main(): # instantiating the Maestro SDK maestro = BotMaestroSDK.from_sys_args() execution = maestro.get_execution() …
Como criar um log
Vamos começar essa etapa, criando o log dentro do BotCity Orquestrador. No menu localizado na lateral esquerda da tela, identifique a categoria “Automation Control”. Nela, teremos a opção “Execution Log”.

Ao entrar na opção “Execution log”, clique em “new log”:

Após isso, vamos preencher as informações solicitadas e adicionar as colunas necessárias para nosso projeto e, ao final, clicar no botão “create log”. Neste caso, adicionamos a coluna “username” com o nome “User” e tamanho de 200 caracteres e também a coluna “message” com o nome “Message” e tamanho de 500 caracteres. Ambas as colunas deverão ficar visíveis.

A coluna “Date” é criada automaticamente, não é necessário adicioná-la. E o log já estará disponível para os repositórios que tiverem acesso a ele:

Saiba mais em: documentação de logs.
Agora que já temos o log criado no Orquestrador, precisamos conectá-lo ao nosso código, para que, de fato, os logs sejam registrados lá. Então em nosso código principal, vamos adicionar o código que faz a criação do log.
Mas antes disso, vamos também configurar a finalização da tarefa para que, quando façamos a execução pelo Orquestrador, ele possa entender que a tarefa finalizou com sucesso ou com erro.
Dentro do trecho de código do try e except, vamos adicionar:
try: … finish_status = AutomationTaskFinishStatus.SUCCESS finish_message = f'Task with username "{USERNAME}" executed with success' except Exception as ex: … finish_status = AutomationTaskFinishStatus.FAILED finish_message = f'Task with username "{USERNAME}" failed: {error_alert.text}'
No código acima, estamos informando o status da tarefa de acordo com a execução do robô e também uma mensagem para que seja possível entender o que aconteceu.
No código finally, vamos adicionar:
finally: … # finish the task maestro.finish_task( task_id=execution.task_id, status=finish_status, message=finish_message ) # create the log maestro.new_log_entry( activity_label="login_control", values = { "username": USERNAME, "message": finish_message } )
Como acompanhar os logs no BotCity Orquestrador
Caso você queira executar o robô localmente, para que consiga se conectar ao Orquestrador, você precisa adicionar primeiro esse código para fazer login na ferramenta:
maestro.login( server="adicione o server aqui", login="adicione o login aqui", key="adicione a chave aqui" )
Para saber qual é o login e a key para esse login ser feito com sucesso, você deverá acessar a área chamada “Dev Environment” pelo menu da lateral esquerda do seu Orquestrador. Saiba mais em: documentação de Dev Environment.
⚠️Lembre-se de que este trecho de código servirá apenas para executar localmente. Você deve retirar esse código antes de disponibilizar o robô no orquestrador para ser executado automaticamente.
Mas também podemos executar dentro do Orquestrador. Para isso, a primeira etapa será fazer o deploy da sua automação seguindo as orientações do tutorial de orquestração da sua automação.
Após o deploy, crie uma tarefa do tipo teste. Isso porque, caso seja necessário, podemos executar a tarefa novamente sem problemas.
Para criar a tarefa, clique na opção “New Task” do menu da lateral esquerda do Orquestrador e escolha a sua automação. No nosso exemplo, chamamos de bot-login. Ao identificá-la, clique em “New Task”, o botão localizado ao final da linha.

Deixe selecionada a checkbox chamada “Test Task” e clique no botão “Create”:

OBS: Lembre-se de deixar o runner vinculado durante o processo de deploy disponível para que consiga executar a tarefa. Mais informações no guia sobre como gerenciar a execução das suas automações.
Após a execução da tarefa, você pode ir até a tela de “Execution Log”, identificar o log criado e verificar se ele foi preenchido corretamente. Atenção para o filtro de período para garantir que o log que você está procurando poderá ser visualizado.

Como fazer download dos logs
Para fazer o download dos logs, você pode clicar no botão “Export”, localizado acima do log e escolher um dos formatos disponíveis: json, csv ou excel.

Outras ações com os logs
Para fazer edição dos logs, deletá-los ou ainda mudá-los de repositório, basta clicar no botão “Actions” localizado acima do log e escolher uma das opções.

⚠️ Se você deletar o log, esta operação apagará todo o histórico de logs e não poderá ser revertido.
Código completo do projeto
from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.firefox.service import Service from botcity.maestro import * # using as constants for example only # in a real scenario, this should be passed as parameters or using credentials feature USERNAME = "student" PASSWORD = "Password123" def main(): # instantiating the Maestro SDK maestro = BotMaestroSDK.from_sys_args() execution = maestro.get_execution() try: # set WebDriver path service = Service(executable_path=r"geckodriver.exe") # create a bot instance bot = webdriver.Firefox(service=service) # access the page Practice Test Automation bot.get("https://practicetestautomation.com/practice-test-login/") # search for the element input to add username input_username = bot.find_element(By.ID, "username") # add the username input_username.send_keys(USERNAME) # search for the password element input_password = bot.find_element(By.ID, "password") # add the password input_password.send_keys(PASSWORD) # search for the button element input_button = bot.find_element(By.ID, "submit") # click on the button input_button.click() # wait 3 seconds to ensure that the page opened sleep(3) # search for the login confirmation logged = bot.find_element(By.CSS_SELECTOR, ".post-title") # print confirmation text print(logged.text) # search for the logout button element logout = bot.find_element(By.CSS_SELECTOR, ".wp-block-button__link") # click on the button logout.click() # search for the login title to ensure that the logout finished bot.find_element(By.CSS_SELECTOR, "#login > h2:nth-child(1)") finish_status = AutomationTaskFinishStatus.SUCCESS finish_message = f'Task with username "{USERNAME}" executed with success' except Exception as ex: # search for the element with the error message error_alert = bot.find_element(By.ID, "error") # print the error message and stacktrace print(error_alert.text) print(ex) finish_status = AutomationTaskFinishStatus.FAILED finish_message = f'Task with username "{USERNAME}" failed: {error_alert.text}' finally: # close the browser bot.quit() # print the message print("Finally") # finish the task maestro.finish_task( task_id=execution.task_id, status=finish_status, message=finish_message ) # create the log maestro.new_log_entry( activity_label="login_control", values = { "username": USERNAME, "message": finish_message } ) if __name__ == "__main__": main()
Quer começar a gerenciar melhor sua automação com o uso dos logs?
Para ir mais a fundo neste assunto, te convidamos a participar da nossa comunidade global de RPA, é só entrar no nosso Slack ou ainda entrar em contato pelo nosso fórum. Qualquer dúvida, só chamar a gente! E não esqueça de criar a sua conta gratuita para testar as funcionalidades que estamos explorando em nossos conteúdos. Ao criar suas automações para aprender como utilizar a ferramenta, lembre-se de compartilhar com a comunidade pelo Repositório de Bots.