Journalisation des messages en Python¶
Vous pouvez enregistrer les messages d’une fonction ou d’un gestionnaire de procédure écrit en Python en utilisant la journalisation, le module de journalisation de la bibliothèque standard de Python. Lorsque vous avez configuré une table d’événements pour stocker les entrées de journal, Snowflake stocke les entrées de journal générées par votre code de gestionnaire dans la table.
Pour plus d’informations sur les niveaux de journalisation pris en charge par Python, reportez-vous à la documentation sur les niveaux de journalisation. Notez que Snowflake traite deux des niveaux de journalisation de Python d’une manière particulière :
Le niveau
CRITICAL
de Python sera traité comme FATAL.Le niveau
NOTSET
de Python sera traité comme TRACE.
Pour des informations générales sur la configuration de la journalisation et la récupération des messages dans Snowflake, reportez-vous à Enregistrement de messages à partir de fonctions et de procédures.
Avant de journaliser à partir d’un code, vous devez :
Mettre en place une table d’événements pour collecter les messages enregistrés par le code du gestionnaire.
Pour plus d’informations, reportez-vous à Configuration d’une table d’événement.
Assurez-vous que le niveau de journalisation est défini de manière à ce que les messages souhaités soient stockés dans la table d’événements.
Pour plus d’informations, reportez-vous à Réglage du niveau de journalisation.
Exemple Python¶
Le code de l’exemple suivant importe le module logging
, obtient un enregistreur et enregistre un message au niveau INFO
.
Pour plus d’informations sur les niveaux de journalisation pris en charge par Python, reportez-vous à la documentation sur les niveaux de journalisation.
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.")
$$;
Vous pouvez accéder aux messages du journal en exécutant une commande SELECT sur la table d’événements. Pour plus d’informations, reportez-vous à Accès aux données des messages enregistrés.
Le code de l’exemple suivant interroge la table d’événements dans laquelle sont stockés les messages du journal. La requête indique la gravité et le message de chaque entrée de journal de la classe du gestionnaire.
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';
L’exemple précédent génère la sortie suivante.
---------------------------------------------------------------------------
| SEVERITY | MESSAGE |
---------------------------------------------------------------------------
| "INFO" | "Logging from Python module." |
---------------------------------------------------------------------------
| "INFO" | "Logging from Python function start." |
---------------------------------------------------------------------------
| "ERROR" | "Logging an error from Python handler." |
---------------------------------------------------------------------------