Protokollierung von Meldungen in Python¶
Sie können Meldungen von einem in Python geschriebenen Funktions- oder Prozedur-Handler protokollieren, indem Sie logging, das Protokollierungsmodul der Standardbibliothek von Python, verwenden. Wenn Sie eine Ereignistabelle zum Speichern von Protokolleinträgen eingerichtet haben, speichert Snowflake die von Ihrem Handler-Code generierten Protokolleinträge in dieser Tabelle.
Weitere Informationen zu den von Python unterstützten Protokolliergraden finden Sie in der Dokumentation zu Protokolliergraden. Beachten Sie, dass Snowflake zwei der Python-Protokolliergrade auf besondere Weise verarbeitet:
Die Python-Schweregrad
CRITICAL
wird als FATAL behandelt.Die Python-Schweregrad
NOTSET
wird als TRACE behandelt.
Allgemeine Informationen zum Einrichten der Protokollierung und zum Abrufen von Meldungen in Snowflake finden Sie unter Protokollierung von Meldungen aus Funktionen und Prozeduren.
Bevor Sie die Protokollierung für Code nutzen können, müssen Sie Folgendes tun:
Einrichten einer Ereignistabelle, in der von Handler-Code protokollierte Meldungen gesammelt werden.
Weitere Informationen dazu finden Sie unter Einrichten einer Ereignistabelle.
Sicherstellen, dass der Protokolliergrad so eingestellt ist, dass die gewünschten Meldungen in der Ereignistabelle gespeichert werden.
Weitere Informationen dazu finden Sie unter Einstellen des Protokolliergrads.
Python-Beispiel¶
Der Code im folgenden Beispiel importiert das Modul logging
, ruft einen Logger ab und protokolliert eine Meldung des Protokolliergrads INFO
.
Weitere Informationen zu den von Python unterstützten Protokolliergraden finden Sie in der Dokumentation zu Protokolliergraden.
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.")
$$;
Sie können auf die Protokollmeldungen zugreifen, indem Sie einen SELECT-Befehl auf der Ereignistabelle ausführen. Weitere Informationen dazu finden Sie unter Zugriff auf protokollierte Meldungsdaten.
Der Code im folgenden Beispiel fragt die Ereignistabelle ab, in der die Protokollmeldungen gespeichert sind. Die Abfrage gibt den Schweregrad und die Meldung jedes Protokolleintrags der Handler-Klasse zurück.
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';
Das vorherige Beispiel generiert die folgende Ausgabe.
---------------------------------------------------------------------------
| SEVERITY | MESSAGE |
---------------------------------------------------------------------------
| "INFO" | "Logging from Python module." |
---------------------------------------------------------------------------
| "INFO" | "Logging from Python function start." |
---------------------------------------------------------------------------
| "ERROR" | "Logging an error from Python handler." |
---------------------------------------------------------------------------