PythonのログSMTPHandlerの - オフラインSMTPサーバを扱います
質問
私は私の新しいPythonスクリプトの設定ロギングモジュールを持っています。私は2つのハンドラ、ファイルにコンテンツを送信する1、および電子メールアラートのための1つを持っています。 SMTPHandlerのはERRORレベル以上何かを郵送するように設定されます。
SMTP接続が失敗しない限り、すべてが、素晴らしい作品。 SMTPサーバが応答しないか、認証が失敗した場合、スクリプト全体が死ぬ、(それがSMTP AUTHのが必要です)。
私は、Pythonにかなり新しいですので、私は電子メールを介してログメッセージを送信するすべての問題は私のスクリプト全体をダウンさせないようにSMTPHandlerのが育てているという例外をキャプチャする方法を把握しようとしています。私はまた、ログファイルにエラーを書いていますので、SMTPアラートが失敗した場合、私はちょうど行く維持したい、何かを停止しません。
私が必要な場合は、「してみてください:」声明、それはmy_logger.errorするlogging.handlers.SMTPHandlerのセットアップの周りに、または個々の呼び出しの周りに行くだろう()
?解決
sys.stderr
に印刷するためのトレースバックを引き起こすかもしれませんが、のロギング中に発生した例外は、スクリプトを停止しないでください。このプリントアウトを防止するために、次の操作を行います:
logging.raiseExceptions = 0
これはデフォルトではありません(開発中のあなたは、通常の障害について知りたいので)が、本番では、raiseExceptions
は設定しないでください。
あなたはSMTPHandler
次回ERROR(またはそれ以上)が記録され、再接続を試みることを見つける必要があります。
logging
はのSystemExit
とKeyboardInterrupt
例外を通過しないが、彼らは、ロギングを使用するアプリケーションの終了を引き起こさないように、他のすべてを処理する必要があります。あなたはこれが当てはまらないことが判明した場合、通り抜けると、スクリプトが終了する原因になっている例外の具体的な詳細を掲載、とPython /オペレーティングシステムのバージョンについてください。スクリプトは(DNSルックアップに時間がかかる、またはSMTP接続に時間がかかる場合、例えば場合)ブロックにハンドラを引き起こしているネットワークのタイムアウトがある場合、ハングアップしたように見えることがあることに注意してください。
他のヒント
あなたはおそらく両方を行う必要があります。これを理解するために、私は、ローカルのメールサーバーをインストールし、それを使用することをお勧めします。この方法では、あなたのスクリプトの実行中にそれをシャットダウンし、エラーメッセージを書き留めすることができます。
、保守コードを維持するために、あなたはするべきあなたが(代わりのtry-を除いて、すべてのロガーの呼び出しをラップする)1つの場所で例外を処理することができますようにSMTPHandlerのを拡張します。