Pythonでのメッセージのログ¶
Pythonの標準ライブラリのログモジュールである ログ を使用すると、Pythonで記述された関数またはプロシージャハンドラーからのメッセージをログできます。ログエントリを格納するイベントテーブルを設定すると、Snowflakeはハンドラーコードによって生成されたログエントリをテーブルに格納します。
Pythonでサポートされているログレベルの詳細については、 ログレベルのドキュメント をご参照ください。Snowflakeは、2つのPythonログレベルを特定の方法で処理することに注意してください。
Python
CRITICAL
レベルは FATAL として扱われます。Python
NOTSET
レベルは TRACE として扱われます。
Snowflakeでのログの設定とメッセージの取得に関する一般的な情報については、 関数とプロシージャからのメッセージのログ をご参照ください。
コードからログする前に、次を実行する必要があります。
ハンドラーコードからログされたメッセージを収集するイベントテーブルを設定します。
詳細については、 イベントテーブルの設定 をご参照ください。
必要なメッセージがイベントテーブルに格納されるようにログレベルが設定されていることを確認してください。
詳細については、 ログレベルの設定 をご参照ください。
Pythonの例¶
次の例のコードは、 logging
モジュールをインポートし、ロガーを取得し、 INFO
レベルでメッセージをログします。
Pythonでサポートされているログレベルの詳細については、 ログレベルのドキュメント をご参照ください。
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.")
$$;
イベントテーブルで SELECT コマンドを実行すると、ログメッセージにアクセスできます。詳細については、 ログされたメッセージデータへのアクセス をご参照ください。
次の例のコードは、ログメッセージが格納されているイベントテーブルをクエリします。クエリは、ハンドラークラスからの各ログエントリの重大度とメッセージを報告します。
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';
前述の例では、次の出力が生成されます。
---------------------------------------------------------------------------
| SEVERITY | MESSAGE |
---------------------------------------------------------------------------
| "INFO" | "Logging from Python module." |
---------------------------------------------------------------------------
| "INFO" | "Logging from Python function start." |
---------------------------------------------------------------------------
| "ERROR" | "Logging an error from Python handler." |
---------------------------------------------------------------------------