Registro de mensagens em Python

É possível registrar mensagens de um manipulador de função ou procedimento escrito em Python usando logging, o módulo de registro na biblioteca padrão do Python. Quando você configura uma tabela de eventos para armazenar entradas de log, o Snowflake armazena na tabela as entradas de log geradas pelo seu código do manipulador.

Para obter mais informações sobre os níveis de registro em log suportados pelo Python, consulte a documentação de níveis de registro em log. Observe que o Snowflake trata dois dos níveis de registro em log do Python de uma maneira específica:

  • O nível Python CRITICAL será tratado como FATAL.

  • O nível Python NOTSET será tratado como TRACE.

Para obter informações gerais sobre a configuração de registro e recuperação de mensagens no Snowflake, consulte Registro de mensagens de funções e procedimentos.

Antes de fazer o registro a partir do código, você deve:

  • Configurar uma tabela de eventos para coletar mensagens registradas do código do manipulador.

    Para obter mais informações, consulte Configuração de uma tabela de eventos.

  • Certifique-se de que o nível de registro em log esteja definido para que as mensagens desejadas sejam armazenadas na tabela de eventos.

    Para obter mais informações, consulte Configuração do nível de registro.

Exemplo em Python

O código no exemplo a seguir importa o módulo logging, obtém um agente de registro e registra uma mensagem no nível INFO.

Para obter mais informações sobre os níveis de registro em log suportados pelo Python, consulte a documentação de níveis de registro em log.

CREATE OR REPLACE PROCEDURE do_logging()
RETURNS VARCHAR
LANGUAGE PYTHON
PACKAGES=('snowflake-snowpark-python')
RUNTIME_VERSION=3.8
HANDLER='do_things'
AS $$
import logging

logger = logging.getLogger("python_logger")
logger.info("Logging from Python module.")

def do_things(session):
  logger.info("Logging from Python function start.")

  try:
    throw_exception()
  except Exception:
    logger.error("Logging an error from Python handler: ")
    return "ERROR"

  return "SUCCESS"

def throw_exception():
  raise Exception("Something went wrong.")

$$;
Copy

Você pode acessar as mensagens de log executando um comando SELECT na tabela de eventos. Para obter mais informações, consulte Acesso a dados de mensagens registradas.

O código no exemplo a seguir consulta a tabela de eventos onde as mensagens de log estão armazenadas. A consulta informa sobre a gravidade e a mensagem de cada entrada de log da classe do manipulador.

SET event_table_name='my_db.public.my_event_table';

SELECT
  RECORD['severity_text'] AS SEVERITY,
  VALUE AS MESSAGE
FROM
  IDENTIFIER($event_table_name)
WHERE
  SCOPE['name'] = 'python_logger'
  AND RECORD_TYPE = 'LOG';
Copy

O exemplo anterior gera a seguinte saída.

---------------------------------------------------------------------------
| SEVERITY | MESSAGE                                                      |
---------------------------------------------------------------------------
| "INFO"   | "Logging from Python module."                 |
---------------------------------------------------------------------------
| "INFO"   | "Logging from Python function start."                           |
---------------------------------------------------------------------------
| "ERROR"  | "Logging an error from Python handler." |
---------------------------------------------------------------------------