設定で、debug = True
すべての SQL クエリをログに記録することができます。
しかし、応答が返される前に、1 つの特定のビューによって行われたすべての SQL クエリをログに記録したいと考えています。
Django 1.3 でこれを行うにはどうすればよいですか?
設定で、debug = True
すべての SQL クエリをログに記録することができます。
しかし、応答が返される前に、1 つの特定のビューによって行われたすべての SQL クエリをログに記録したいと考えています。
Django 1.3 でこれを行うにはどうすればよいですか?
これは、特定のビューのコンテキスト内でログ設定を変更することで実行できます。
まだDEBUG
有効にする必要があります:
パフォーマンス上の理由から、インストールされているロギング レベルやハンドラーに関係なく、settings.DEBUG が True に設定されている場合にのみ、SQL ロギングが有効になります。
... ただし、特定のビューによるクエリのみがログに記録されるように構成を変更できます。
方法は次のとおりです。
1: settings.py
django SQL ロガー ( django.db.backends
) レベルをINFO
以上に設定し、SQL クエリの記録を停止したことを確認します。
2.a. ビューの最初の行で SQL ロギングを行い、そのロガー レベルを に設定しますDEBUG
。最後の行で、元の値に戻します。これは最も簡単な方法ですが、ビュー コードの前後にミドルウェアによって実行されたクエリはログに記録されません。
2.b. ビュー処理の前後で同じことを行うカスタム ミドルウェアを記述します。最初に配置すると、他のミドルウェアによって行われたすべてのクエリもログに記録されます。
このメソッドはスレッド セーフではないことに注意してください。ただし、開発環境でのみこの設定が必要なため、これは問題ではありません。
Django ドキュメント「ロギング」の章: https://docs.djangoproject.com/en/1.4/topics/logging/
Python ログ ライブラリ リファレンス: http://docs.python.org/library/logging.html