- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!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())