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.")

$$;
Copy

イベントテーブルで 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';
Copy

前述の例では、次の出力が生成されます。

---------------------------------------------------------------------------
| SEVERITY | MESSAGE                                                      |
---------------------------------------------------------------------------
| "INFO"   | "Logging from Python module."                 |
---------------------------------------------------------------------------
| "INFO"   | "Logging from Python function start."                           |
---------------------------------------------------------------------------
| "ERROR"  | "Logging an error from Python handler." |
---------------------------------------------------------------------------