Python でキャッチされなかった例外をログに記録するにはどうすればよいですか?

DDD
リリース: 2024-10-22 23:54:29
オリジナル
842 人が閲覧しました

How to Log Uncaught Exceptions in Python?

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 関数をオーバーライドできます。

以下は、次のような追加機能を含む完全なログ構成の例です。

  • キーボード割り込み (Ctrl C) イベントを無視して、プログラムを正常に終了できるようにします
  • 例外レポートにロギング モジュールのフォーマット機能を利用します
  • 未処理の例外を stderr ではなく stdout に出力します
<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 サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!