Registro em log de erros e alertas em UDFs do Python - Amazon Redshift

Registro em log de erros e alertas em UDFs do Python

Você pode usar o módulo de log Python para criar mensagens de erro e alerta definidas pelo usuário em suas UDFs. Depois da execução da consulta, você poderá consultar a exibição do sistema SVL_UDF_LOG para recuperar mensagens registradas.

nota

O log de UDF consome recursos do cluster e pode afetar a performance do sistema. Recomendamos a implementação de log somente para desenvolvimento e solução de problemas.

Durante a execução da consulta, o handler do log grava mensagens na exibição de sistema de SVL_UDF_LOG, assim como o nome da função, nó e fatia correspondentes. O handler do log grava uma linha no SVL_UDF_LOG por mensagem e por fatia. As mensagens são truncadas para 4.096 bytes. O log da UDF é limitado a 500 linhas por fatia. Quando o log fica cheio, o handler do log descarta as mensagens mais antigas e adiciona uma mensagem de alerta em SVL_UDF_LOG.

nota

O manipulador de log UDF do Amazon Redshift escapa caracteres de nova linha (\n ), barra vertical (|) e barra invertida (\) com um caractere barra invertida (\).

Por padrão, o nível de log de UDF é definido como WARNING. As mensagens com um nível de log WARNING, ERROR e CRITICAL são registradas. As mensagens com problemas de segurança INFO, DEBUG e NOTSET são ignoradas. Ao definir o nível de log de UDF, use o método do registrador Python. Por exemplo, defina o nível de log como INFO da forma a seguir.

logger.setLevel(logging.INFO)

Para mais informações sobre como usar o módulo de registro Python, consulte Instalação de registro para Python na documentação Python.

O exemplo a seguir cria uma função chamada f_pyerror que importa o módulo de log Python, instancia o registrador e registra um erro.

CREATE OR REPLACE FUNCTION f_pyerror() RETURNS INTEGER VOLATILE AS $$ import logging logger = logging.getLogger() logger.setLevel(logging.INFO) logger.info('Your info message here') return 0 $$ language plpythonu;

O exemplo a seguir consulta SVL_UDF_LOG para visualizar a mensagem registrada no exemplo anterior.

select funcname, node, slice, trim(message) as message from svl_udf_log; funcname | query | node | slice | message ------------+-------+------+-------+------------------ f_pyerror | 12345 | 1| 1 | Your info message here