---
name: azion-consulte-logs-de-funcoes-com-graphql-api
description: >-
  Recupere as linhas de log de console e de runtime das suas funções em um intervalo de tempo e filtre-as pelo conteúdo da mensagem.
---

# Consulte logs de funções com GraphQL API

Você pode recuperar as linhas de log que uma função escreve com [GraphQL API](/pt-br/documentacao/devtools/graphql/visao-geral/). Rode a query por uma plataforma de API como Postman ou pelo GraphiQL Playground em Azion Console. O dataset `functionConsoleEvents` retorna as mensagens que o seu código escreve com `console.log` e as linhas que Azion Runtime produz. Para tempo de computação e contagem de invocações, consulte [Consulte dados de uso de Functions](/pt-br/documentacao/guias/plataforma/observabilidade/consultar-dados-de-uso-edge-functions-com-graphql/). Para relacionar uma entrada à sua causa, consulte [Solução de problemas de execução e logs de funções](/pt-br/documentacao/plataforma/functions/solucao-de-problemas/).

---

## Pré-requisitos

- Um personal token. Para criar um, consulte [Personal Tokens](/pt-br/documentacao/fundamentos/personal-tokens/).
- Uma função que já rodou pelo menos uma vez. Criar uma função não a executa. Uma função que nunca roda não escreve entradas.

---

## Monte a query

O dataset `functionConsoleEvents` guarda uma entrada por mensagem de log. Esta query retorna 10 entradas de um intervalo de tempo, ordenadas da mais antiga para a mais recente:

```graphql
query ConsoleLog {
  functionConsoleEvents(
    limit: 10,
    filter: {
      tsRange: {begin:"2023-02-01T10:10:10", end:"2023-06-15T10:10:10"}
    }
    orderBy: [ts_ASC]
  )
  {
    ts
    solutionId
    configurationId
    functionId
    id
    lineSource
    level
    line
  }
}
```

Defina `begin` e `end` com o intervalo de tempo que você quer ler. O campo `limit` aceita até 10.000 linhas por query e uma query seleciona no máximo 37 campos. Para os dois limites, consulte [Limites API GraphQL](/pt-br/documentacao/devtools/graphql/limites/).

---

## Envie a query

O endpoint do Real-Time Events, `https://api.azion.com/v4/events/graphql`, recebe a query. Para enviá-la pelo Postman ou por outra plataforma de API:

1. **Crie uma requisição**

   Para a configuração completa do Postman, consulte [Como rodar requisições da GraphQL no Postman](/pt-br/documentacao/guias/plataforma/observabilidade/consultar-graphql-postman/).

2. **Adicione o seu personal token ao header Authorization**

   Digite `Authorization: Token [TOKEN VALUE]`, em que `[TOKEN VALUE]` é o token que você criou.

3. **Defina o método como POST**

4. **Digite o endpoint do Real-Time Events como URL**

   Digite `https://api.azion.com/v4/events/graphql`.

5. **Adicione a query ConsoleLog ao corpo da requisição**

6. **Envie a requisição**

A resposta carrega as entradas correspondentes em JSON:

```json
{
    "data": {
        "functionConsoleEvents": [
            {
                "ts": "2023-06-12T17:09:54Z",
                "solutionId": "1234567890",
                "configurationId": "1234567891",
                "functionId": "9483",
                "id": "fa498cd9-cbep-4382-8bbb-32b029fe7411",
                "lineSource": "RUNTIME",
                "level": "ERROR",
                "line": "TypeError: Object not found"
            },
            {
                "ts": "2023-06-12T17:09:54Z",
                "solutionId": "1234567890",
                "configurationId": "1234567891",
                "functionId": "9483",
                "id": "fa498cd9-cbep-4382-8bbb-32b029fe7411",
                "lineSource": "RUNTIME",
                "level": "ERROR",
                "line": "TypeError: Object not found"
            },
            {
                "ts": "2023-06-12T17:09:54Z",
                "solutionId": "1234567890",
                "configurationId": "1234567891",
                "functionId": "9483",
                "id": "fa498cd9-cbep-4382-8bbb-32b029fe7411",
                "lineSource": "RUNTIME",
                "level": "ERROR",
                "line": "    at async mainFetch (ext:cells_fetch/26_fetch.js:266:12)"
            }
        ]
    }
}
```

Cada entrada carrega o nível da mensagem em `level`, a sua categoria em `lineSource` e a própria mensagem em `line`. `CONSOLE` marca uma linha que o seu próprio código escreveu com `console.log`. Uma linha que Azion Runtime produziu, como uma exceção, carrega `RUNTIME`. O campo `id` é o identificador da requisição e agrega todas as mensagens de uma mesma requisição. Para todos os campos do dataset, consulte [Campos da API GraphQL do Real-Time Events](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-events/).

Agora você tem as entradas de log do intervalo de tempo, cada uma com o seu nível e a sua origem.

> **dica**
>
> Para rodar a query sem uma plataforma de API, faça login em Azion Console e abra `https://api.azion.com/v4/events/graphql`. Use o GraphiQL Playground para escrever, validar e testar queries no browser. Consulte [Primeiros Passos API GraphQL](/pt-br/documentacao/devtools/graphql/primeiros-passos/).

---

## Filtre as entradas pela mensagem

Cada chave do filtro junta um nome de campo a um operador, como em `tsRange` e `lineLike`. Para retornar apenas as entradas cuja mensagem corresponde a um padrão, adicione `lineLike` ao filtro:

```graphql
query ConsoleLogErrors {
  functionConsoleEvents(
    limit: 10,
    filter: {
      tsRange: {begin:"2023-02-01T10:10:10", end:"2023-06-15T10:10:10"},
      lineLike: "%TypeError%"
    }
    orderBy: [ts_ASC]
  )
  {
    ts
    functionId
    id
    lineSource
    level
    line
  }
}
```

O caractere `%` representa qualquer sequência de caracteres, então `"%TypeError%"` corresponde a toda linha que contém `TypeError`. `Like` diferencia maiúsculas de minúsculas e `Ilike` é a sua forma que não diferencia. Para todos os operadores, consulte [Queries API GraphQL](/pt-br/documentacao/devtools/graphql/recursos/#operadores).

---

## Próximos passos

- [Solução de problemas de execução e logs de funções](/pt-br/documentacao/plataforma/functions/solucao-de-problemas.md): Relacione uma entrada de log à falha que a produziu e aplique a correção.
- [Campos do Real-Time Events](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-events.md): Todos os campos do dataset functionConsoleEvents, com um valor de exemplo.
- [Primeiros passos com a GraphQL API](/pt-br/documentacao/devtools/graphql/primeiros-passos.md): O personal token, o endpoint de cada dataset e o GraphiQL Playground.
- [Faça o debug de functions no Data Stream](/pt-br/documentacao/guias/plataforma/observabilidade/debugging-functions-data-stream.md): Envie a mesma saída de log para um endpoint que você controla.
