Snowparkチェックポイントライブラリ: Logging¶
SnowparkチェックポイントはPythonの組み込み ログ モジュールを使用して、内部操作に関するログメッセージを提供します。ライブラリは、ライブラリの動作を理解し、問題を診断するために使用できる、さまざまな ログレベル でログメッセージを出力します。
ログ構造¶
Snowparkチェックポイントはモジュールレベルのログアプローチに従っており、メッセージをログに記録する必要があるPythonモジュールはそれぞれ独自のロガーを定義し、ロガーの名前はモジュールの完全修飾名と一致します。
Snowparkチェックポイントを構成する各パッケージは、トップレベルのロガーを定義します。このロガーは、パッケージ自体の名前にちなんで命名され、そのパッケージ内のすべてのモジュールレベルのロガーの親として動作します。トップレベルのロガーは、 NullHandler で初期化され、明示的にロギングを構成しない限り、ログメッセージが意図しない出力を生成しないことを保証します。トップレベルロガーに適用されたログ構成は、自動的にそのパッケージ内のすべてのモジュールロガーに適用されます。
以下は、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"
)
高度なログ構成¶
より高度なログ構成のためには、 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)
特定のパッケージのログを有効にする¶
他のロガーに影響を与えずに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)
Pythonのログモジュールの詳細については、 Pythonログドキュメント を参照してください。