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:

  1. 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ção central_log_admin não tenha outros privilégios), execute a seguinte instrução:

    GRANT MODIFY LOG LEVEL ON ACCOUNT TO ROLE central_log_admin;
    
    Copy

    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.

  2. 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 UDF f1(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;
    
    Copy

    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:

  1. 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;
    
    Copy
  2. 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;
    
    Copy

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.
Copy

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.
Copy