Ir para o conteúdo

Logs

O Log de Execução é uma maneira muito poderosa de registrar saídas, rastrear a execução e coletar métricas de sua automação. Nessa seção você encontra como fazer manipulações de Logs via SDK.

Orquestrador BotCity

Você também pode fazer uso da funcionalidade de Log de Execução diretamente na plataforma do Orquestrador BotCity.

Veja mais em:

Criar um log

Você pode criar um Log customizado para coletar dados de execução de tarefas.

Para criar um novo Log, você precisa das seguintes informações:

  • Label: identificador unico do Log a ser criado.
  • Colunas: Lista de colunas que compõe o Log, definidos com a classe Column:
    • name: Nome amigável exibido no Orquestrador BotCity.
    • label: Identificador unico para esta coluna no Log.
    • width: (opcional) Largura sugerida em pixels.

Atenção!

O SDK fornece a classe Column que ajuda a criar a lista de colunas do Log.

Veja um exemplo de criação de Log:

# Crie uma lista de colunas
colunas = [
    Column(name="# Registros", label="registros"),
    Column(name="Status", label="status"),
]

# Crie um novo log
maestro.new_log(
    activity_label="logLabel",
    columns=colunas
)
// Crie uma lista de colunas
List<Column> columns = Arrays.asList(
    new Column("# Registros", "registros", 200),
    new Column("Status", "status", 100)
);

// Crie um novo log
maestro.newLog("logLabel", columns);
// Crie uma lista de colunas
const columns = [
    new Column("# Registros", "registros", 300),
    new Column("Status", "status", 300),
]

// Crie um novo log
await maestro.createLog("logLabel", columns);
// Crie uma lista de colunas
const columns: Column[] = [
    new Column("# Registros", "registros", 300),
    new Column("Status", "status", 300),
]

// Crie um novo log
const log: Log = await maestro.createLog("logLabel", columns);
using Dev.BotCity.MaestroSdk.Model.Log;

// Crie uma lista de colunas
List<Column> columns = new List<Column>
{
    new Column("# Records", "records", 200),
    new Column("Status", "status", 100)
};

// Crie um novo log
Log log = await maestro.NewLogAsync("logLabel", columns);

Criar entradas de Log

Com o Log criado, cada entrada de Log registra uma nova linha com dados coletados pela automação.

Para criar uma entrada de Log, você precisa das seguintes informações:

  • Label: identificador unico do Log já criado.
  • Valores: chave (label da coluna) e valor baseados nas colunas criadas.

Veja um exemplo de entrada de Log:

maestro.new_log_entry(
    activity_label="logLabel",
    values = {
        "registros": "10",
        "status": "SUCCESS"
    }
)
Map<String,Object> values = new HashMap<String,Object>();
values.put("registros","10");
values.put("status","SUCCESS");

maestro.newLogEntry("logLabel", columns);
await maestro.logEntry(
    "logLabel",
    {
        registros: "10",
        status: "SUCCESS"
    }
)
await maestro.logEntry(
    "logLabel",
    {
        registros: "10",
        status: "SUCCESS"
    }
)
var newEntry = new Dictionary<string, object>
{
    { "records", "10"},
    { "status", "SUCCESS" },
};

await maestro.NewLogEntryAsync("logLabel", newEntry);

Quais tipos de valores são aceitos?

Os Logs registram informações de saída para acompanhamento de execução. Portanto, os valores passados para cada coluna devem ser objetos JSON serializable.

Para envio de dados mais complexos, veja a opção: Arquivos de resultado.

Buscar dados de Log

Você pode retornar os registros de log filtrados por data.

Para buscar um novo Log, você precisa das seguintes informações:

  • Label: identificador unico do Log já criado.
  • Data: data inicial para filtrar a busca dos registros.

Filtro de Data

O parâmetro date deve usar o formato DD/MM/YYYY. Se date não for informado, todos os dados do log serão recuperados.

Veja o exemplo de implementação:

# Obtenha a data de início como 30 dias atrás
instante = (datetime.datetime.now() - datetime.timedelta(days=30))
data = instante.strftime("%d/%m/%Y")

# Obtenha os dados do log
dados = maestro.get_log(activity_label="logLabel", date=data)
// Obtenha a data de início como 30 dias atrás
Instant instante = Instant.now().minus(30, ChronoUnit.DAYS);
Date data = Date.from(instante);

// Recupere os dados do log
List<Row> dados = maestro.getLog("logLabel", data);
const dados = await maestro.fetchDataLog("logLabel", 30)
const dados: DataLog[] = await maestro.fetchDataLog("logLabel", 30)
DateTime now = DateTime.Now;
DateTime pastDate = now.AddDays(-30);
string formattedDate = pastDate.ToString("dd/MM/yyyy");

// Obtenha os dados do log
List<Entry> entries = await maestro.GetLogAsync("logLabel", DateTime.Now);

Baixar como CSV

Você pode retornar os registros de Log e salvá-lo como um arquivo .CSV.

Veja o exemplo:

# Ainda não implementado
// Defina dias de filtro para pesquisar
int dias = 30;

// Defina o caminho para salvar o arquivo
File arquivoLog = new File("<caminho para salvar arquivo>/log.csv");

// Recupere os dados do log
byte[] dados = maestro.getLogFile("logLabel", dias);

// Salve no disco
Files.write(dados, arquivoLog);
// Defina o caminho para salvar o arquivo
const caminhoArquivo = "log.csv"

// Defina dias de filtro para pesquisar
const dias = 30

const dados = await maestro("logLabel", caminhoArquivo, dias)
// Defina o caminho para salvar o arquivo
const caminhoArquivo: string = "log.csv"

// Defina dias de filtro para pesquisar
const dias: number = 30

const dados: Buffer = await maestro("logLabel", caminhoArquivo, dias)
// Ainda não implementado

Excluir um Log inteiro

Você pode excluir um Log inteiro, juntamente todos os registros dele de forma irreversível.

Atenção!

Esta operação apagará TODO o histórico de registro do Log e não poderá ser revertido.

Veja um exemplo de como excluir o Log:

maestro.delete_log(activity_label="logLabel")

Roadmap

Não disponível ainda.

await maestro.deleteLog("logLabel")
await maestro.deleteLog("logLabel")
await maestro.DeleteLogAsync("logLabel");