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

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

4

2 に答える 2

57

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 で動作します。

于 2011-01-29T22:22:16.790 に答える
8

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

Python のログ モジュールを使用したくない場合は、print を使用する代わりimport sysに書き込みを行うこともできます。sys.stderrコマンド ラインでは、これは画面に表示されます。Apache で実行している場合は、エラー ログに表示されます。

于 2011-01-29T23:07:46.913 に答える