トップ 一覧 ping 検索 ヘルプ RSS ログイン

Django 生成されるSQLをロギングするの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!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 のときには、以下を実行すればロギングされる
*http://www.dabapps.com/blog/logging-sql-queries-django-13/
 >>> 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 ApiTest(TestCase):
 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())