PythonでSnowflakeの不要なログを抑制する

silver and diamond studded cross pendant

Snowflake Pythonコネクタは標準のPythonロギングモジュールを使用しています。

このため、ロギングレベルを変更することで出力されるメッセージの制御が可能です。

ただし、ロギングレベルを変更することは、接続の状態に関する重要な情報が隠される可能性があります。

そのため、この変更を行う前に、その意味を完全に理解し、接続が安全であることを確認する必要があります。

以下に、Snowflakeのロギングレベルを変更する方法を示します。

  1. まず、snowflake.connectorをインポートするPythonモジュールで、コネクタのメソッドを呼び出す前に以下のコードを追加します。これにより、警告またはそれ以上のレベルのログのみが出力されます。
import logging
logging.getLogger('snowflake.connector').setLevel(logging.WARNING)
  1. 上記のソリューションでも、すべてのSnowflakeメッセージが消えない場合は、以下のコードを使用して、すべてのSnowflakeロガーをより高いレベルに設定できます。
import logging
for name in logging.Logger.manager.loggerDict.keys():
if 'snowflake' in name:
logging.getLogger(name).setLevel(logging.WARNING)
logging.getLogger(name).propagate = False

この変更により、以下のようなエラーメッセージが表示されなくなります。

eventType: 'RevocationCheckFailure',
eventSubType: 'OCSPResponseFailedToConnectCacheServer|OCSPResponseFetchException|OCSPResponseFetchException|OCSPResponseFetchException|OCSPResponseFetchException',
sfcPeerHost: 'xxxxx.ap-northeast-1.privatelink.snowflakecomputing.com',
certId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
ocspRequestBase64: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
ocspResponderURL: 'http://o.ss2.us/',
errorMessage: "254003: Could not fetch OCSP Response from server. Consider checking your whitelists : Exception - HTTPConnectionPool(host='ocsp.xxxxx.ap-northeast-1.privatelink.snowflakecomputing.com', port=80): Max retries exceeded with url: /retry/o.ss2.us/xxxxx+xxx= (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0xffff9c1ec190>: Failed to establish a new connection: [Errno -2] Name or service not known'))",
insecureMode: False,
failOpen: True,
cacheEnabled: True,
cacheHit: False

このメッセージは、OCSP(Online Certificate Status Protocol)の検証が失敗した場合に出力されます。OCSPは、TLS接続の設定中に、接続先の証明書が有効であることを確認するためのプロトコルです。このメッセージが表示されるということは、SnowflakeコネクタがOCSP応答を取得できなかったことを示します。このような場合、接続が安全であることを確認した上で、ロギングレベルを変更することを検討してください。

これらのステップを適用すると、Snowflake Pythonコネクタの不要なログ出力を抑制できます。ただし、これによりエラー情報が失われる可能性があるため、注意が必要です。常に接続が安全であることを確認し、必要に応じて適切なロギングレベルを選択してください。