Python でのキャッチされなかった例外のログ記録
Python プログラムで例外が発生し、現在の実行ブロック内で処理されない場合、自動的にログに記録されます。標準エラー (stderr) に出力されます。この動作は、特にロギングやデバッグの目的ですべての例外をキャプチャしたい場合には不便な場合があります。
この問題を解決するには、捕捉されなかった例外を自動的に出力するようにロギング モジュールを構成できます。ここでは、logging.Exception() 関数を活用したソリューションを示します。
<code class="python">try: raise Exception('Throwing a boring exception') except Exception as e: logging.exception(e)</code>
このアプローチは効果的ですが、各例外を明示的に処理してログに記録する必要があります。より自動化されたソリューションとして、捕捉されなかった例外を処理する Python の sys.Excepthook 関数をオーバーライドできます。
以下は、次のような追加機能を含む完全なログ構成の例です。
<code class="python">import sys import logging logger = logging.getLogger(__name__) handler = logging.StreamHandler(stream=sys.stdout) logger.addHandler(handler) def handle_exception(exc_type, exc_value, exc_traceback): if issubclass(exc_type, KeyboardInterrupt): sys.__excepthook__(exc_type, exc_value, exc_traceback) return logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback)) sys.excepthook = handle_exception if __name__ == "__main__": raise RuntimeError("Test unhandled")</code>
この構成を適用すると、捕捉されなかった例外はすべてロギング モジュールによって自動的に記録されます。
以上がPython でキャッチされなかった例外をログに記録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。