web-dev-qa-db-ja.com

Djangoのロガーを使用してトレースバックをログに記録するにはどうすればよいですか?

try:
    print blah
except KeyError:
    traceback.print_exc()

私はこのようにデバッグしていました。コンソールに印刷します。ここで、Apacheは印刷を許可しないため、印刷ではなくすべてをログに記録したいと思います。では、このトレースバック全体をログに記録するにはどうすればよいですか?

28
TIMEX

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で機能します。

51
Lin

Djangoのトランクバージョン(またはリリース時には1.3)を実行している場合、Pythonの標準ログモジュールと統合されたデフォルトのログ構成がいくつか組み込まれています。そのために必要なのは、_import logging_を呼び出し、logger = logging.getLogger(__name__)を呼び出してから、logger.exception(msg)を呼び出すだけで、メッセージとスタックトレースの両方を取得できます。 Djangoのロギング機能 および Pythonのlogger.exceptionメソッド のドキュメントは便利なリファレンスです。

Pythonのロギングモジュールを使用したくない場合は、printを使用する代わりに、_import sys_を使用して_sys.stderr_に書き込むこともできます。コマンドラインでは、これは画面に移動します。Apacheで実行すると、エラーログに移動します。

7
Gabriel Hurley