try:
print blah
except KeyError:
traceback.print_exc()
私はこのようにデバッグしていました。コンソールに出力します。Apache では印刷が許可されていないため、印刷の代わりにすべてをログに記録したいと考えています。では、このトレースバック全体をログに記録するにはどうすればよいでしょうか?
Python のロギング メカニズムを使用できます。
import logging
...
logger = logging.getLogger("blabla")
...
try:
print blah # You can use logger.debug("blah") instead of print
except KeyError:
logger.exception("An error occurred")
これにより、スタック トレースが出力され、Apache で動作します。
Django のトランク バージョン (リリース時には 1.3) を実行している場合、Python の標準ログ モジュールと統合された、多数の既定のログ構成が組み込まれています。そのために必要なことはimport logging
、 を呼び出しlogger = logging.getLogger(__name__)
てから呼び出すlogger.exception(msg)
だけで、メッセージとスタック トレースの両方を取得できます。Django のロギング機能とPython の logger.exception メソッドのドキュメントは参考になります。
Python のログ モジュールを使用したくない場合は、print を使用する代わりimport sys
に書き込みを行うこともできます。sys.stderr
コマンド ラインでは、これは画面に表示されます。Apache で実行している場合は、エラー ログに表示されます。