Snowparkチェックポイントライブラリ: Logging

SnowparkチェックポイントはPythonの組み込み ログ モジュールを使用して、内部操作に関するログメッセージを提供します。ライブラリは、ライブラリの動作を理解し、問題を診断するために使用できる、さまざまな ログレベル でログメッセージを出力します。

ログ構造

Snowparkチェックポイントはモジュールレベルのログアプローチに従っており、メッセージをログに記録する必要があるPythonモジュールはそれぞれ独自のロガーを定義し、ロガーの名前はモジュールの完全修飾名と一致します。

Snowparkチェックポイントを構成する各パッケージは、トップレベルのロガーを定義します。このロガーは、パッケージ自体の名前にちなんで命名され、そのパッケージ内のすべてのモジュールレベルのロガーの親として動作します。トップレベルのロガーは、 NullHandler で初期化され、明示的にロギングを構成しない限り、ログメッセージが意図しない出力を生成しないことを保証します。トップレベルロガーに適用されたログ構成は、自動的にそのパッケージ内のすべてのモジュールロガーに適用されます。

以下は、Snowparkチェックポイントのトップレベルのロガー名です。

Snowparkチェックポイントのロガー名

パッケージ名

トップレベルのロガー名

snowpark-checkpoints-collectors

snowflake.snowpark_checkpoints_collector

snowpark-checkpoints-validators

snowflake.snowpark_checkpoints

snowpark-checkpoints-configuration

snowflake.snowpark_checkpoints_configuration

snowpark-checkpoints-hypothesis

snowflake.hypothesis_snowpark

このモジュールレベルのアプローチは、ログ出力のきめ細かい制御を可能にし、ログがその出所に関する正確な情報を出力しながら、より高いレベルのロガーからの設定を継承することを確実にします。

ログ構成

Snowparkチェックポイントにはデフォルトのログ構成はありません。ログメッセージを見るには、アプリケーションで明示的にログを構成する必要があります。

アプリケーションにPythonの組み込みログモジュールを使用したログ構成が既にある場合、追加構成なしでSnowparkチェックポイントが出力するログメッセージを見ることができるはずです。ログ構成がない場合は、 basicConfig 関数を使用するか、カスタム構成を作成することでログをセットアップできます。

ログの構成は、メインスクリプトやアプリケーションを初期化するモジュールなど、アプリケーションのエントリーポイントで一度だけ行うことをお勧めします。これにより、ライブラリコンポーネントが使用される前にログがセットアップされるようになります。ライブラリをスタンドアロンのスクリプト内で使用する場合、ログはそのスクリプトの最初にセットする必要があります。以下はその例です。

ログの基本構成

ログを有効にする最も簡単で早い方法は、 basicConfig 関数を使うことです。この関数は、ログモジュール階層内のすべてのロガーの祖先である、ルートロガーを構成することができます。

以下の例は、指定されたログレベル以上のログメッセージをキャプチャし、コンソールに出力するルートロガーのセットアップ方法を示しています。

import logging

logging.basicConfig(
  level=logging.DEBUG, # Adjust the log level as needed
  format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
Copy

高度なログ構成

より高度なログ構成のためには、 logging.config モジュールを使ってログをセットアップすることができます。このアプローチでは、カスタムのロガー、ハンドラー、フォーマッターを定義し、ディクショナリを使用して構成することができます。

次の例は、コンソールとファイルにメッセージをログするカスタム構成を使用して、ルートロガーをセットアップする方法を示しています。

import logging.config
from datetime import datetime

LOGGING_CONFIG = {
  "version": 1,
  "disable_existing_loggers": False,
  "formatters": {
      "standard": {
          "format": "{asctime} - {name} - {levelname} - {message}",
          "style": "{",
          "datefmt": "%Y-%m-%d %H:%M:%S",
      },
  },
  "handlers": {
      "console": {
          "class": "logging.StreamHandler",
          "formatter": "standard",
          "level": "DEBUG",  # Adjust the log level as needed
      },
      "file": {
          "class": "logging.FileHandler",
          "formatter": "standard",
          "filename": f"app_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.log",
          "level": "DEBUG",  # Adjust the log level as needed
          "encoding": "utf-8",
      },
  },
  "root": {
      "handlers": ["console", "file"],
      "level": "DEBUG",  # Adjust the log level as needed
  },
}

logging.config.dictConfig(LOGGING_CONFIG)
Copy

特定のパッケージのログを有効にする

他のロガーに影響を与えずにSnowparkチェックポイントの特定のパッケージのログを構成するには、そのパッケージのトップレベルのロガー名を使用し、必要に応じてカスタムハンドラーとフォーマッターを適用します。トップレベルのロガーに構成を適用すると、すべてのモジュールレベルのロガーがその構成を継承します。

以下の例は、以下のパッケージのログだけを構成する方法を示しています。

  • snowpark-checkpoints-collectors

  • snowpark-checkpoints-configuration

  • snowpark-checkpoints-validators

  • snowpark-checkpoints-hypothesis

import logging.config
from datetime import datetime

LOGGING_CONFIG = {
  "version": 1,
  "disable_existing_loggers": False,
  "formatters": {
      "standard": {
          "format": "{asctime} - {name} - {levelname} - {message}",
          "style": "{",
          "datefmt": "%Y-%m-%d %H:%M:%S",
      },
  },
  "handlers": {
      "console": {
          "class": "logging.StreamHandler",
          "formatter": "standard",
          "level": "DEBUG",  # Adjust the log level as needed
      },
      "file": {
          "class": "logging.FileHandler",
          "formatter": "standard",
          "filename": f"app_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.log",
          "level": "DEBUG",  # Adjust the log level as needed
          "encoding": "utf-8",
      },
  },
  "loggers": {
      "snowflake.snowpark_checkpoints_collector": {
          "handlers": ["console", "file"],
          "level": "DEBUG",  # Adjust the log level as needed
          "propagate": False,
      },
      "snowflake.snowpark_checkpoints": {
          "handlers": ["console", "file"],
          "level": "DEBUG",  # Adjust the log level as needed
          "propagate": False,
      },
      "snowflake.snowpark_checkpoints_configuration": {
          "handlers": ["console", "file"],
          "level": "DEBUG",  # Adjust the log level as needed
          "propagate": False,
      },
      "snowflake.hypothesis_snowpark": {
          "handlers": ["console", "file"],
          "level": "DEBUG",  # Adjust the log level as needed
          "propagate": False,
      },
  },
}

logging.config.dictConfig(LOGGING_CONFIG)
Copy

Pythonのログモジュールの詳細については、 Pythonログドキュメント を参照してください。