| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

Django 生成されるSQLをロギングする

提供: MyMemoWiki
ナビゲーションに移動 検索に移動

Django 生成されるSQLをロギングする

Django |

Django ロギング設定 に変更を加える

  • Django ロギング設定 に、DEBUG = True の時だけ、ログを出力するフィルターを作成
  • django用のロガーを作成
LOGGING = {
   'version': 1,
   'disable_existing_loggers': False,
   'formatters': {
       'verbose': {
           'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
       },
       'simple': {
           'format': '%(levelname)s %(message)s'
       },
   },    
   'filters': {
       'require_debug_false': {
           '()': 'django.utils.log.RequireDebugFalse'
       },
       'require_debug_true': {
           '()': 'django.utils.log.RequireDebugTrue'
       }
   },
   'handlers': {
       'mail_admins': {
           'level': 'ERROR',
           'filters': ['require_debug_false'],
           'class': 'django.utils.log.AdminEmailHandler'
       },
       'console':{
           'level':'DEBUG',
           'class':'logging.StreamHandler',
           'formatter': 'verbose'
       },
   },
   'loggers': {
       'django.request': {
           'handlers': ['mail_admins'],
           'level': 'ERROR',
           'propagate': True,
       },
       'django':{
           'handlers': ['console', 'mail_admins'],
           'level': 'DEBUG',
           'filters' : ['require_debug_true'],
       },
       'myapp':{
           'handlers': ['console', 'mail_admins'],
           'level': 'DEBUG',
       },
   }

manage.py shell のときには、以下を実行すればロギングされる

>>> import logging
>>> l = logging.getLogger('django.db.backends')
>>> l.setLevel(logging.DEBUG)
>>> l.addHandler(logging.StreamHandler())
>>> for b in Bookmark.objects.all():
...    print b.page.url
...    
http://google.co.jp
http://yahoo.co.jp
(0.000) SELECT "Bookmark_bookmark"."id", "Bookmark_bookmark"."page_id", "Bookmark_bookmark"."user_id" FROM "Bookmark_bookmark"; args=()
(0.000) SELECT "Bookmark_page"."id", "Bookmark_page"."url" FROM "Bookmark_page" WHERE "Bookmark_page"."id" = 1 ; args=(1,)
(0.004) SELECT "Bookmark_page"."id", "Bookmark_page"."url" FROM "Bookmark_page" WHERE "Bookmark_page"."id" = 2 ; args=(2,)

DjangoのテストでSQLをロギングする

  • セットアップでロガーを有効にする
from django.conf import settings
from django.test import TestCase
from django.test.client import Client

class SimpleTest(TestCase):
    @staticmethod
    def setUpClass():
        settings.DEBUG = True
        import logging
        l = logging.getLogger('django.db.backends')
        l.setLevel(logging.DEBUG)
        l.addHandler(logging.StreamHandler())