!!!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 SimpleTest(TestCase): @staticmethod def setUpClass(): settings.DEBUG = True import logging l = logging.getLogger('django.db.backends') l.setLevel(logging.DEBUG) l.addHandler(logging.StreamHandler())