Réglage du niveau de journalisation

Vous pouvez définir le niveau de gravité des messages de journal que vous souhaitez enregistrer dans la table d’événements. Pour ce faire, réglez le paramètre LOG_LEVEL à un niveau spécifié. Les messages de ce niveau (et des niveaux plus graves) sont intégrés dans la table d’événements.

LOG_LEVEL est à la fois un paramètre d’objet et un paramètre de session, ce qui signifie que vous pouvez définir le paramètre sur les objets et les sessions.

Note

Vous pouvez utiliser le code du gestionnaire pour remplacer le niveau de journalisation que vous avez défini avec SQL (comme décrit dans cette rubrique) lorsque votre gestionnaire est écrit en Python. Pour plus d’informations, voir Remplacement des niveaux de seuil de journalisation avec Python.

Comprendre les niveaux de journalisation

Lorsque vous définissez le paramètre LOG_LEVEL sur un niveau spécifique, seuls les messages du niveau spécifié (et les messages de niveaux plus graves) sont ingérés et mis à disposition dans la table d’événements.

Par exemple, si le paramètre LOG_LEVEL est réglé sur WARN, les messages des niveaux WARN, ERROR et FATAL sont saisis dans la table d’événements.

Pour une liste des valeurs LOG_LEVEL et des niveaux correspondants de messages ingérés, voir LOG_LEVEL.

Définir le niveau de journalisation d’un objet

Vous pouvez définir le niveau de journalisation pour les objets suivants :

  • Une procédure stockée

  • Fonction définie par l’utilisateur (UDF) ou fonction de table définie par l’utilisateur (UDTF)

  • Une base de données ou un schéma contenant des procédures et des fonctions

Pour définir le niveau de journalisation d’un objet, procédez comme suit :

  1. Vérifiez que vous avez le privilège de définir le niveau de journalisation de l’objet.

    Vous devez utiliser un rôle qui bénéficie des privilèges globaux suivants ou qui en hérite :

    • Le privilège global MODIFY LOG LEVEL sur le compte.

    • Le privilège MODIFY sur l’objet pour lequel vous voulez définir LOG_LEVEL

    Par exemple, pour accorder au rôle central_log_admin le privilège de définir le niveau de journalisation sur toute base de données, tout schéma, toute procédure stockée, UDF ou UDTF dans le compte (même ceux pour lesquels le rôle central_log_admin n’a pas d’autres privilèges), exécutez l’instruction suivante :

    GRANT MODIFY LOG LEVEL ON ACCOUNT TO ROLE central_log_admin;
    
    Copy

    Notez que pour définir le niveau de journalisation d’une procédure stockée ou d’une UDF, le rôle central_log_admin doit également disposer du privilège USAGE sur la base de données/le schéma contenant la procédure stockée ou l’UDF.

    Pour plus d’informations sur les privilèges MODIFY LOG LEVEL et USAGE, voir Privilèges de contrôle d’accès.

  2. Utilisez la commande ALTER <objet> pour définir le paramètre LOG_LEVEL sur l’objet.

    Pour la liste des niveaux que vous pouvez utiliser, voir le paramètre LOG_LEVEL. Comme indiqué précédemment, les messages au niveau spécifié (et les messages à des niveaux plus sévères) sont intégrés dans la table des événements actifs.

    Par exemple, pour définir le niveau de journalisation pour une UDF spécifique, utilisez ALTER FUNCTION pour définir le paramètre LOG_LEVEL pour cette UDF. Autre exemple, pour définir le niveau de journalisation par défaut pour toutes les fonctions et procédures d’une base de données, utilisez ALTER DATABASE pour définir le paramètre LOG_LEVEL sur cette base de données.

    L’exemple suivant définit le niveau de journalisation sur ERROR pour toutes les fonctions et procédures de la base de données db. L’exemple remplace ce niveau par WARN pour l’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

    Pour plus de détails sur la façon dont Snowflake détermine le niveau de journalisation effectif lorsque le LOG LEVEL est défini sur différents objets, voir Comprendre comment Snowflake détermine le niveau de journalisation effectif.

Définition du niveau de journalisation pour la session en cours

Pour définir le niveau de journalisation des appels aux fonctions et procédures effectués dans la session en cours :

  1. Vérifiez que vous avez le privilège de définir le niveau de journalisation de l’objet.

    Vous devez utiliser un rôle qui a reçu le privilège global MODIFY SESSION LOG LEVEL sur le compte.

    Par exemple, pour accorder au rôle developer_debugging le privilège de définir les niveaux de journalisation pour la session en cours, exécutez l’instruction suivante :

    GRANT MODIFY SESSION LOG LEVEL ON ACCOUNT TO ROLE developer_debugging;
    
    Copy
  2. Utilisez la commande ALTER SESSION pour définir le paramètre LOG_LEVEL de la session en cours.

    Par exemple :

    USE ROLE developer_debugging;
    
    -- Set the logging level to DEBUG for the current session.
    ALTER SESSION SET LOG_LEVEL = DEBUG;
    
    Copy

Si le paramètre LOG_LEVEL est défini sur différents niveaux pour la session en cours et pour les fonctions et procédures appelées dans cette session, Snowflake détermine le niveau d’enregistrement effectif à utiliser. Voir Comprendre comment Snowflake détermine le niveau de journalisation effectif.

Comprendre comment Snowflake détermine le niveau de journalisation effectif

Vous pouvez remplacer le paramètre LOG_LEVEL (à la fois pour les objets et les sessions) en utilisant une hiérarchie de niveaux. En d’autres termes, vous pouvez remplacer le LOG_LEVEL défini à un niveau supérieur de la hiérarchie en définissant le LOG_LEVEL d’un objet situé à un niveau inférieur.

La hiérarchie des paramètres de session et d’objet LOG_LEVEL est décrite ci-après.

  • Pour les paramètres de session, la hiérarchie est Compte » Utilisateur » Session.

    Cela signifie que vous pouvez définir le paramètre pour un compte, remplacer le paramètre au niveau du compte pour un utilisateur et remplacer le paramètre au niveau de l’utilisateur pour la session en cours.

  • Pour les paramètres de l’objet, la hiérarchie est Compte » Base de données » Schéma » Objet.

    Cela signifie que vous pouvez définir le paramètre pour un compte, remplacer le paramètre au niveau du compte pour une base de données ou un schéma, et remplacer le paramètre au niveau de la base de données ou du schéma pour des procédures stockées spécifiques et des UDFs dans cette base de données ou ce schéma.

Par exemple, le LOG_LEVEL d’une fonction remplace le LOG_LEVEL du compte qui contient la fonction. Si le LOG_LEVEL du compte est FATAL et le LOG_LEVEL de l’UDF Java du compte est INFO, le LOG_LEVEL effectif est INFO (le niveau de la fonction, pas du compte) :

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

Dans les cas où le LOG_LEVEL est défini à la fois dans les hiérarchies de paramètres de session et d’objet, le paramètre LOG_LEVEL le plus verbeux est utilisé.

Le tableau suivant présente des exemples de la manière dont les paramètres définis pour la session et l’objet affectent le niveau de journalisation utilisé.

Valeur de la session

Valeur de l’objet, du schéma, de la base de données ou du compte

Niveau de journalisation utilisé

(non défini)

WARN

WARN

DEBUG

(non défini)

DEBUG

WARN

ERROR

WARN

INFO

DEBUG

DEBUG

(non défini)

(non défini)

OFF

Par exemple, le LOG_LEVEL DEBUG l’emporte sur le LOG_LEVEL INFO. Si le LOG_LEVEL de la session est DEBUG et le LOG_LEVEL de l’UDF Java est INFO, le LOG_LEVEL DEBUG de la session prévaut sur le LOG_LEVEL INFO de l’UDF. (DEBUG est plus verbeux 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