「Django 生成されるSQLをロギングする」の版間の差分
ナビゲーションに移動
検索に移動
1行目: | 1行目: | ||
− | ==Django 生成されるSQLをロギングする== | + | ==[[Django 生成されるSQLをロギングする]]== |
[[Django]] | | [[Django]] | | ||
− | ===Django ロギング設定 に変更を加える=== | + | ===[[Django ロギング設定]] に変更を加える=== |
− | *Django ロギング設定 に、DEBUG = True の時だけ、ログを出力するフィルターを作成 | + | *[[Django ロギング設定]] に、DEBUG = True の時だけ、ログを出力するフィルターを作成 |
*django用のロガーを作成 | *django用のロガーを作成 | ||
LOGGING = { | LOGGING = { | ||
18行目: | 18行目: | ||
'filters': { | 'filters': { | ||
'require_debug_false': { | 'require_debug_false': { | ||
− | '()': 'django.utils.log. | + | '()': 'django.utils.log.[[R]]equireDebugFalse' |
}, | }, | ||
'require_debug_true': { | 'require_debug_true': { | ||
− | '()': 'django.utils.log. | + | '()': 'django.utils.log.[[R]]equireDebugTrue' |
} | } | ||
}, | }, | ||
'handlers': { | 'handlers': { | ||
'mail_admins': { | 'mail_admins': { | ||
− | 'level': ' | + | 'level': 'E[[R]][[R]]O[[R]]', |
'filters': ['require_debug_false'], | 'filters': ['require_debug_false'], | ||
'class': 'django.utils.log.AdminEmailHandler' | 'class': 'django.utils.log.AdminEmailHandler' | ||
39行目: | 39行目: | ||
'django.request': { | 'django.request': { | ||
'handlers': ['mail_admins'], | 'handlers': ['mail_admins'], | ||
− | 'level': ' | + | 'level': 'E[[R]][[R]]O[[R]]', |
'propagate': True, | 'propagate': True, | ||
}, | }, | ||
64行目: | 64行目: | ||
http://google.co.jp | http://google.co.jp | ||
http://yahoo.co.jp | http://yahoo.co.jp | ||
− | (0.000) SELECT "Bookmark_bookmark"."id", "Bookmark_bookmark"."page_id", "Bookmark_bookmark"."user_id" | + | (0.000) SELECT "Bookmark_bookmark"."id", "Bookmark_bookmark"."page_id", "Bookmark_bookmark"."user_id" F[[R]]OM "Bookmark_bookmark"; args=() |
− | (0.000) SELECT "Bookmark_page"."id", "Bookmark_page"."url" | + | (0.000) SELECT "Bookmark_page"."id", "Bookmark_page"."url" F[[R]]OM "Bookmark_page" WHE[[R]]E "Bookmark_page"."id" = 1 ; args=(1,) |
− | (0.004) SELECT "Bookmark_page"."id", "Bookmark_page"."url" | + | (0.004) SELECT "Bookmark_page"."id", "Bookmark_page"."url" F[[R]]OM "Bookmark_page" WHE[[R]]E "Bookmark_page"."id" = 2 ; args=(2,) |
− | === | + | ===[[Django]]のテストでSQLをロギングする=== |
*セットアップでロガーを有効にする | *セットアップでロガーを有効にする | ||
from django.conf import settings | from django.conf import settings |
2020年2月16日 (日) 04:24時点における最新版
目次
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())
© 2006 矢木浩人