Logs
Go to LogsLogs are a very powerful way to track the execution of your automation and collect metrics.
The logs are available for visualization and download via the Execution Log menu.
When selecting a log to view, you can filter by date and immediately download a CSV, JSON, or Excel file of your data.
Tip
Explore the to get code examples that facilitate logs manipulations, access and learn how to create a new log entry, fetch log data, downloading as CSV and deleting an entire log via code.
The generated snippets are available in languages Python, Java, JavaScript, and TypeScript.
Important
To view the code examples, you will need first to create a log structure.
Create log using the BotCity Maestro¶
Through the BotCity Maestro interface, you can create and manipulate custom logs for each of your needs.
Clicking on the New Log button will take you to the Log creation screen where you can define the Log label, which is the unique ID to be used when interacting with this Log via the BotCity Maestro SDK or API as well as the columns.
You can create as many logs as you desire to better organize your data and automation management.
How to create a log entry using the Maestro SDK¶
You can easily create a new log entry using the Maestro SDK in your automation code.
Warning
To be able to create a new log entry via code, the log structure must be already created in Maestro.
Installation¶
If you don't have the dependency installed yet, just follow these instructions:
Important
In addition to installing, remember to include the dependency in the bot's requirements.txt
file.
<repositories>
<repository>
<id>nexus-botcity-public</id>
<url>https://devtools.botcity.dev:8081/repository/botcity-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<!-- Your other dependencies -->
<dependency>
<groupId>dev.botcity</groupId>
<artifactId>maestro-sdk</artifactId>
<version>2.0.3</version>
</dependency>
</dependencies>
Importing the SDK¶
After installation, import the dependency and instantiate the Maestro SDK:
# Import for integration with BotCity Maestro SDK
from botcity.maestro import *
# Disable errors if we are not connected to Maestro
BotMaestroSDK.RAISE_NOT_CONNECTED = False
# Instantiating the Maestro SDK
maestro = BotMaestroSDK.from_sys_args()
# Fetching the details of the current task being executed
execution = maestro.get_execution()
// Import for integration with BotCity Maestro SDK
const { BotMaestroSdk } = require('@botcity/botcity-maestro-sdk')
// Getting parameters passed by Runner
const args = process.argv.slice(2)
const [server, taskid, token] = args
// Login with information from the Dev. Environment page
const maestro = new BotMaestroSdk()
maestro.login("YOUR_SERVER_HERE", "YOUR_USER_HERE", "YOUR_KEY_HERE")
// Fetching the details of the current task being executed
const executionTask = await maestro.getTask(taskid)
// Import for integration with BotCity Maestro SDK
import { BotMaestroSdk } from '@botcity/botcity-maestro-sdk'
// Getting parameters passed by Runner
const args = process.argv.slice(2)
const [server, taskid, token] = args
// Login with information from the Dev. Environment page
const maestro: BotMaestroSdk = new BotMaestroSdk()
maestro.login("YOUR_SERVER_HERE", "YOUR_USER_HERE", "YOUR_KEY_HERE")
// Fetching the details of the current task being executed
const executionTask: Task = await maestro.getTask(taskid)
Creating a new log entry¶
# Importing datetime library to define the timestamp of the execution
import datetime
# Creating a new log entry in the BotCity Maestro
maestro.new_log_entry(
activity_label="logLabel",
values = {
"timestamp": datetime.datetime.now().strftime("%Y-%m-%d_%H-%M"),
"records": "10",
"status": "SUCCESS"
}
)
// Defining the day and time of execution
String timestamp = new SimpleDateFormat("yyyy-MM-dd_HH-mm").format(new java.util.Date());
// Creating a new log entry in the BotCity Maestro
Map<String,Object> values = new HashMap<String,Object>();
values.put("timestamp", timestamp);
values.put("records", "10");
values.put("status", "SUCCESS");
maestro.newLogEntry("logLabel", values);
Complete code¶
from botcity.core import DesktopBot
from botcity.maestro import *
# Importing datetime library to define the timestamp of the execution
import datetime
# Disable errors if we are not connected to Maestro
BotMaestroSDK.RAISE_NOT_CONNECTED = False
def main():
maestro = BotMaestroSDK.from_sys_args()
execution = maestro.get_execution()
# Creating a new log entry in the BotCity Maestro
maestro.new_log_entry(
activity_label="ResultsLog",
values = {
"timestamp": datetime.datetime.now().strftime("%Y-%m-%d_%H-%M"),
"records": "10",
"status": "SUCCESS"
}
)
bot = DesktopBot()
# Implement here your logic...
...
def not_found(label):
print(f"Element not found: {label}")
if __name__ == '__main__':
main()
import dev.botcity.framework.bot.DesktopBot;
import dev.botcity.maestro_sdk.BotExecutor;
import dev.botcity.maestro_sdk.BotMaestroSDK;
import dev.botcity.maestro_sdk.model.AlertType;
import dev.botcity.maestro_sdk.runner.BotExecution;
import dev.botcity.maestro_sdk.runner.RunnableAgent;
public class FirstBot extends DesktopBot implements RunnableAgent
{
public FirstBot() {
try {
setResourceClassLoader(this.getClass().getClassLoader());
} catch(Exception e) {
e.printStackTrace();
}
}
@Override
public void action(BotExecution botExecution) {
try {
BotMaestroSDK maestro = new BotMaestroSDK();
maestro.login(botExecution);
// Defining the day and time of execution
String timestamp = new SimpleDateFormat("yyyy-MM-dd_HH-mm").format(new java.util.Date());
// Creating a new log entry in the BotCity Maestro
Map<String,Object> values = new HashMap<String,Object>();
values.put("timestamp", timestamp);
values.put("records", "10");
values.put("status", "SUCCESS");
maestro.newLogEntry("ResultsLog", values);
// Implement here your logic...
...
} catch(Exception e) {
e.printStackTrace();
}
}
private void notFound(String label) {
System.out.println("Element not found: "+label);
}
public static void main(String[] args) {
BotExecutor.run(new FirstBot(), args);
}
}
const main = async () => {
const { BotMaestroSdk } = require('@botcity/botcity-maestro-sdk')
const args = process.argv.slice(2)
const [server, taskid, token] = args
const maestro = new BotMaestroSdk()
maestro.login("YOUR_SERVER_HERE", "YOUR_USER_HERE", "YOUR_KEY_HERE")
const executionTask = await maestro.getTask(taskid)
// Creating a new log entry in the BotCity Maestro
await maestro.logEntry(
"ResultsLog",
{
timestamp: new Date().toISOString(),
records: "10",
status: "SUCCESS"
}
)
}
main()
const main = async () => {
import { BotMaestroSdk } from '@botcity/botcity-maestro-sdk'
const args = process.argv.slice(2)
const [server, taskid, token] = args
const maestro: BotMaestroSdk = new BotMaestroSdk()
maestro.login("YOUR_SERVER_HERE", "YOUR_USER_HERE", "YOUR_KEY_HERE")
const executionTask: Task = await maestro.getTask(taskid)
// Creating a new log entry in the BotCity Maestro
await maestro.logEntry(
"ResultsLog",
{
timestamp: new Date().toISOString(),
records: "10",
status: "SUCCESS"
}
)
}
main()
Tip
Look at the other operations we can do with logs using the BotCity Maestro SDK and BotCity Maestro API.