2012-04-18 10 views
1

私は、設定ではdebug = Trueを持つことができ、すべてのSQLクエリがログに記録されることを知っています。Djangoの1つのビューに対してのみクエリを記録することはできますか?

しかし、応答が返される前に、特定のビューで作成されたすべてのSQLクエリを記録します。

Django 1.3でこれを行うにはどうすればいいですか?

+0

。ログ記録のための監視をチェックするhttps://github.com/dcramer/sentry –

答えて

1

これは、特定のビューのコンテキスト内でログ設定を変更することによって実行できます。あなたはまだDEBUGを有効にする必要があり

:settings.DEBUGは関係なく、インストールされているログ・レベルまたはハンドラの、Trueに設定されている場合

パフォーマンス上の理由から、SQLのログのみが有効になります。

...ただし、特定のビューによるクエリのみが記録されるように構成を変更できます。 INFO以上に設定settings.pyでDjangoのSQLロガー(django.db.backends)レベルと、それはSQLクエリを記録停止していることを確認します。

1:ここでは

は、それが行うことができる方法です。

2.a。ビューの最初の行にSQLロギングを設定するには、ロガーレベルをDEBUGに設定します。最後の行は元の値に戻します。これは最も簡単な方法ですが、ビューコードの前後のミドルウェアによって実行されるクエリはログに記録されません。

2.b。ビュー処理の前後で同じことを行うカスタムミドルウェアを作成します。最初に配置すると、他のミドルウェアによって作成されたすべてのクエリも記録されます。

このメソッドはスレッドセーフではありませんが、開発環境でのみこの設定が必要なので、これは問題ではありません。


Djangoのドキュメント "ロギング" の章: https://docs.djangoproject.com/en/1.4/topics/logging/

ライブラリリファレンスをロギングのPython:余談として http://docs.python.org/library/logging.html

+0

ありがとう!これを試してみる:) – John

関連する問題