2012-04-08 22 views
1

私は、アプリケーションのユーザに、Pythonのロギングモジュールを使って表示するために、いくつかのレイヤーの情報を持つ例外処理メカニズムを用意しようとしています。python - 例外トレースバックの選択的処理

アプリケーションでは、ロギングモジュールには、DEBUG情報を保持するファイルハンドラと、INFO情報を保持するためのストリームハンドラという2つのハンドラがあります。デフォルトでは、ログレベルはINFOに設定されています。私が達成しようとしているのは、例外が発生した場合、デフォルトでトレースバックなしで単純なエラーメッセージが表示されるセットアップです。ロギングレベルがDEBUGに設定されている場合、ユーザーは単純メッセージのみをにする必要がありますが、今回は例外ハンドラバックがファイルハンドラを介してログファイルに記録されます。

これは可能ですか?

私はlogger.exception(e)を使ってみましたが、常にトレースバックをコンソールに表示します。

答えて

2

tracebackモジュールが参考になる場合があります。アプリケーションのトップレベルで、あなたはすべてのステートメントのキャッチを置く必要があります:try/catchブロックの外

setup_log_and_other_basic_services() 
try: 
    run_your_app() 
except Exception as e: 
    if is_debug(): 
     traceback.print_stack() 
    else: 
     traceback.print_stack(get_log_file()) 
    print e 

コードクラッシュさせてはなりません。

+0

この解決策では、例外から始まるトレースバックではなく、exceptブロックで開始するトレースバックが印刷されます。それは実際にクラッシュの原因をローカライズするのに役立ちません。 –

0

カスタム例外処理関数を記述し、catchを書くたびにそれを使用します。

この機能では、どのモードがオン(INFOまたはDEBUG)であるかを確認し、例外に関する情報を抽出し、必要に応じて手動でロガーにフィードする必要があります。