Configuração do nível de registro¶
Você pode definir o nível de gravidade das mensagens de registro que deseja armazenar na tabela de eventos. Para fazer isso, defina o parâmetro LOG_LEVEL como um nível específico. As mensagens nesse nível (e em níveis mais graves) são ingeridas na tabela de eventos.
LOG_LEVEL é tanto um parâmetro de objeto quanto um parâmetro de sessão, o que significa que você pode definir o parâmetro em objetos e sessões.
Nota
Você pode usar o código do manipulador para substituir o nível de log definido com SQL (conforme descrito neste tópico) quando seu manipulador for escrito em Python. Para obter mais informações, consulte Substituição dos níveis de limite de log com Python.
Explicação dos níveis de log¶
Quando você define o parâmetro LOG_LEVEL como um nível especificado, somente as mensagens no nível especificado (e as mensagens em níveis mais graves) são ingeridas e disponibilizadas na tabela de eventos.
Por exemplo, definir o parâmetro LOG_LEVEL como WARN significa que as mensagens nos níveis WARN, ERROR e FATAL são capturadas na tabela de eventos.
Para obter uma lista de valores LOG_LEVEL
e os níveis correspondentes de mensagens ingeridas, consulte LOG_LEVEL.
Definição do nível de registro em um objeto¶
É possível definir o nível de registro nos seguintes objetos:
Um procedimento armazenado
Uma função definida pelo usuário (UDF) ou uma função de tabela definida pelo usuário (UDTF)
Um banco de dados ou esquema que contém procedimentos e funções
Para definir o nível de registro em um objeto, faça o seguinte:
Verifique se você tem o privilégio de definir o nível de registro no objeto.
Você deve usar uma função que receba ou herde os seguintes privilégios:
O privilégio global MODIFY LOG LEVEL na conta.
O privilégio MODIFY no objeto para o qual você deseja definir LOG_LEVEL
Por exemplo, para conceder à função
central_log_admin
o privilégio de definir o nível de registro em qualquer banco de dados, esquema, procedimento armazenado, UDF ou UDTF na conta (mesmo aqueles para os quais a funçãocentral_log_admin
não tenha outros privilégios), execute a seguinte instrução:GRANT MODIFY LOG LEVEL ON ACCOUNT TO ROLE central_log_admin;
Observe que, para definir o nível de registro em um procedimento armazenado ou UDF, a função
central_log_admin
também deve ter o privilégio USAGE no banco de dados/esquema que contém o procedimento armazenado ou UDF.Para obter mais informações sobre os privilégios MODIFY LOG LEVEL e USAGE, consulte Privilégios de controle de acesso.
Use o comando ALTER <objeto> para definir o parâmetro LOG_LEVEL no objeto.
Para obter a lista de níveis que você pode usar, consulte o parâmetro LOG_LEVEL. Conforme mencionado anteriormente, as mensagens no nível especificado (e as mensagens em níveis mais graves) são ingeridas na tabela de eventos ativas.
Por exemplo, para definir o nível de registro para uma UDF específica, use ALTER FUNCTION para definir o parâmetro LOG_LEVEL para essa UDF. Como outro exemplo, para definir o nível de registro padrão para todas as funções e procedimentos em um banco de dados, use ALTER DATABASE para definir o parâmetro LOG_LEVEL nesse banco de dados.
O exemplo a seguir define o nível de registro como ERROR para todas as funções e procedimentos no banco de dados
db
. O exemplo substitui esse nível por WARN para a UDFf1(int)
.USE ROLE central_log_admin; -- Set the log levels on a database and UDF. ALTER DATABASE db1 SET LOG_LEVEL = ERROR; ALTER FUNCTION f1(int) SET LOG_LEVEL = WARN;
Para obter mais detalhes sobre como o Snowflake determina o nível de registro efetivo quando o LOG LEVEL é definido em objetos diferentes, consulte Como o Snowflake determina o nível de registro efetivo.
Definição do nível de registro da sessão atual¶
Para definir o nível de registro para chamadas para funções e procedimentos feitos na sessão atual:
Verifique se você tem o privilégio de definir o nível de registro no objeto.
Você deve ter uma função com o privilégio global MODIFY SESSION LOG LEVEL na conta.
Por exemplo, para conceder à função
developer_debugging
o privilégio de definir os níveis de registro da sessão atual, execute a seguinte instrução:GRANT MODIFY SESSION LOG LEVEL ON ACCOUNT TO ROLE developer_debugging;
Use o comando ALTER SESSION para definir o parâmetro LOG_LEVEL para a sessão atual.
Por exemplo:
USE ROLE developer_debugging; -- Set the logging level to DEBUG for the current session. ALTER SESSION SET LOG_LEVEL = DEBUG;
Se o parâmetro LOG_LEVEL for definido como níveis diferentes para a sessão atual e nas funções e procedimentos chamados nessa sessão, o Snowflake determinará o nível de registro efetivo a ser usado. Consulte Como o Snowflake determina o nível de registro efetivo.
Como o Snowflake determina o nível de registro efetivo¶
Você pode substituir o parâmetro LOG_LEVEL (tanto para objetos quanto para sessões) usando uma hierarquia de níveis. Em outras palavras, é possível substituir o LOG_LEVEL definido em um nível superior da hierarquia pela definição do LOG_LEVEL para um objeto em um nível inferior.
A seguir, descrevemos a hierarquia dos parâmetros LOG_LEVEL de sessão e objeto.
Para parâmetros de sessão, a hierarquia é Conta » Usuário » Sessão.
Isso significa que você pode definir o parâmetro para uma conta, substituir o parâmetro no nível da conta para um usuário e substituir o parâmetro no nível do usuário para a sessão atual.
Para parâmetros de objeto, a hierarquia é Conta » Banco de dados » Esquema » Objeto.
Isso significa que você pode definir o parâmetro para uma conta, substituir o parâmetro em nível de conta para um banco de dados ou esquema e substituir o parâmetro em nível de banco de dados ou esquema para procedimentos armazenados específicos e UDFs nesse banco de dados ou esquema.
Por exemplo, o LOG_LEVEL de uma função substitui o LOG_LEVEL da conta que contém a função. Se o LOG_LEVEL da conta for FATAL e o LOG_LEVEL da UDF de Java da conta for INFO, o LOG_LEVEL efetivo será INFO (o nível da função, não da conta):
ALTER ACCOUNT SET LOG_LEVEL = FATAL;
ALTER FUNCTION MYJAVAUDF SET LOG_LEVEL = INFO;
-- The INFO log level is used because the FUNCTION MYJAVAUDF
-- is lower than the ACCOUNT in the hierarchy.
Nos casos em que LOG_LEVEL é definido nas hierarquias de parâmetros da sessão e do objeto, o LOG_LEVEL mais detalhado é usado.
A tabela a seguir lista exemplos de como os parâmetros definidos na sessão e no objeto afetam o nível de registro usado.
Valor da sessão
Valor do objeto, esquema, banco de dados ou conta
Nível de registro usado
(não definido)
WARN
WARN
DEBUG
(não definido)
DEBUG
WARN
ERROR
WARN
INFO
DEBUG
DEBUG
(não definido)
(não definido)
OFF
Por exemplo, o LOG_LEVEL DEBUG substitui o LOG_LEVEL INFO. Se o LOG_LEVEL da sessão for DEBUG e o LOG_LEVEL da UDF de Java for INFO, o LOG_LEVEL DEBUG da sessão substituirá o LOG_LEVEL INFO da UDF. (DEBUG é mais detalhado do que INFO).
ALTER SESSION SET LOG_LEVEL = DEBUG;
ALTER FUNCTION MYJAVAUDF SET LOG_LEVEL = INFO;
-- The DEBUG log level is used because DEBUG is more verbose than INFO.