Acesso a dados de mensagens registradas

As mensagens registradas são armazenadas em uma tabela de eventos que você configurou para suportar o registro. Você pode acessar as mensagens registradas executando o comando SELECT na tabela de eventos.

Nota

Antes de começar a registrar mensagens, é necessário configurar uma tabela de eventos. Para obter mais informações, consulte Configuração de uma tabela de eventos.

Uma tabela de eventos tem um conjunto de colunas predefinidas que capturam informações sobre as mensagens registradas, inclusive:

  • O carimbo de data/hora em que a mensagem foi ingerida.

  • O escopo do evento de log, como o nome da classe em que o evento de log foi criado.

  • A origem do evento de log, incluindo o banco de dados, o esquema, o usuário, o warehouse e assim por diante.

  • O nível de gravidade do log.

  • A mensagem de log.

Para obter informações de referência sobre as colunas da tabela de eventos, consulte Colunas da tabela de eventos.

Exemplo de consulta de dados de registro

As seções a seguir ilustram com dados de exemplo como é possível consultar a tabela de eventos para obter dados de mensagens de log.

Dados coletados

A saída no exemplo a seguir mostra o conteúdo de um subconjunto selecionado de colunas de uma tabela de eventos depois que as mensagens de registro foram capturadas para dois manipuladores separados, um escrito em Scala e o outro em Python.

Para obter informações de referência sobre as colunas da tabela de eventos que coletam dados de mensagens de log, consulte Dados para logs.

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| TIMESTAMP           | SCOPE                             | RESOURCE_ATTRIBUTES   | RECORD_TYPE | RECORD                       | VALUE                                                      |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | { "name": "python_logger" }       | **See excerpt below** | LOG         | { "severity_text": "INFO" }  | Logging from Python module.                                |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | { "name": "python_logger" }       |                       | LOG         | { "severity_text": "INFO" }  | Logging from Python function start.                        |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | { "name": "python_logger" }       |                       | LOG         | { "severity_text": "ERROR" } | Logging an error from Python handler.                      |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:12:55 | { "name": "ScalaLoggingHandler" } |                       | LOG         | { "severity_text": "INFO" }  | Logging from within the Scala constructor.                 |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:12:56 | { "name": "ScalaLoggingHandler" } |                       | LOG         | { "severity_text": "INFO" }  | Logging from Scala method start.                           |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:12:56 | { "name": "ScalaLoggingHandler" } |                       | LOG         | { "severity_text": "ERROR" } | Logging an error from Scala handler: Something went wrong. |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Trechos de RESOURCE_ATTRIBUTES

Os seguintes trechos JSON contêm um atributo de coluna RESOURCE_ATTRIBUTES cujos dados estão incluídos na saída anterior. O código de consulta SELECT que segue esses trechos seleciona o valor desse atributo.

A coluna RESOURCE_ATTRIBUTES contém dados sobre a origem do evento. Para informações de referência, consulte Coluna RESOURCE_ATTRIBUTES.

{
  ...
  "snow.executable.name": "ADD_TWO_NUMBERS(A FLOAT, B FLOAT):FLOAT"
  ...
}

{
  ...
  "snow.executable.name": "ADD_TWO_NUMBERS(A FLOAT, B FLOAT):FLOAT"
  ...
}

{
  ...
  "snow.executable.name": "ADD_TWO_NUMBERS(A FLOAT, B FLOAT):FLOAT"
  ...
}

{
  ...
  "snow.executable.name": "DO_LOGGING():VARCHAR(16777216)"
  ...
}

{
  ...
  "snow.executable.name": "DO_LOGGING():VARCHAR(16777216)"
  ...
}

{
  ...
  "snow.executable.name": "DO_LOGGING():VARCHAR(16777216)"
  ...
}
Copy

Consulta com instrução SELECT

Ao consultar dados de mensagens, você pode selecionar valores de atributos em uma coluna usando a notação de parênteses, como no formulário a seguir:

COLUMN_NAME['attribute_name']
Copy

O código no exemplo abaixo consulta a tabela anterior com a intenção de isolar os dados relacionados às mensagens de log do manipulador Python. A consulta seleciona o atributo severity_text para a gravidade da entrada de log. Ele seleciona o conteúdo da coluna VALUE para a mensagem de log.

O procedimento que contém o manipulador é chamado do_logging. Observe que você deve especificar o nome do procedimento com todas as letras maiúsculas para que a consulta funcione.

SET event_table_name='my_db.public.my_event_table';

SELECT
  TIMESTAMP as time,
  RESOURCE_ATTRIBUTES['snow.executable.name'] as executable,
  RECORD['severity_text'] as severity,
  VALUE as message
FROM
  IDENTIFIER($event_table_name)
WHERE
  SCOPE['name'] = 'python_logger'
  AND RESOURCE_ATTRIBUTES['snow.executable.name'] LIKE '%DO_LOGGING%'
  AND RECORD_TYPE = 'LOG';
Copy

Resultados de consultas

A saída no exemplo a seguir ilustra o resultado da consulta.

----------------------------------------------------------------------------------------------------------------
| TIME                | EXECUTABLE                       | SEVERITY   | MESSAGE                                |
----------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | "DO_LOGGING():VARCHAR(16777216)" | "INFO"     | "Logging from Python module."          |
----------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | "DO_LOGGING():VARCHAR(16777216)" | "INFO"     | "Logging from Python function start."  |
----------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | "DO_LOGGING():VARCHAR(16777216)" | "ERROR"    | "Logging an error from Python handler" |
----------------------------------------------------------------------------------------------------------------