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

MyMemoWiki

「Django 生成されるSQLをロギングする」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の1版が非表示)
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.RequireDebugFalse'
+
             '()': 'django.utils.log.[[R]]equireDebugFalse'
 
         },
 
         },
 
         'require_debug_true': {
 
         'require_debug_true': {
             '()': 'django.utils.log.RequireDebugTrue'
+
             '()': 'django.utils.log.[[R]]equireDebugTrue'
 
         }
 
         }
 
     },
 
     },
 
     'handlers': {
 
     'handlers': {
 
         'mail_admins': {
 
         'mail_admins': {
             'level': 'ERROR',
+
             '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': 'ERROR',
+
             '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" FROM "Bookmark_bookmark"; args=()
+
  (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" FROM "Bookmark_page" WHERE "Bookmark_page"."id" = 1 ; args=(1,)
+
  (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" FROM "Bookmark_page" WHERE "Bookmark_page"."id" = 2 ; args=(2,)
+
  (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をロギングする===
+
===[[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())