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

MyMemoWiki

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

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
(ページの作成:「==Django 生成されるSQLをロギングする== [Django] ===Django ロギング設定 に変更を加える=== *Django ロギング設定 に、DEBUG = True の…」)
 
1行目: 1行目:
 
==Django 生成されるSQLをロギングする==
 
==Django 生成されるSQLをロギングする==
[Django]
+
[[Django]]
  
 
===Django ロギング設定 に変更を加える===
 
===Django ロギング設定 に変更を加える===
55行目: 55行目:
 
====manage.py shell のときには、以下を実行すればロギングされる====
 
====manage.py shell のときには、以下を実行すればロギングされる====
 
*http://www.dabapps.com/blog/logging-sql-queries-django-13/
 
*http://www.dabapps.com/blog/logging-sql-queries-django-13/
  >>> import logging
+
  >>> import logging
  >>> l = logging.getLogger('django.db.backends')
+
  >>> l = logging.getLogger('django.db.backends')
  >>> l.setLevel(logging.DEBUG)
+
  >>> l.setLevel(logging.DEBUG)
  >>> l.addHandler(logging.StreamHandler())
+
  >>> l.addHandler(logging.StreamHandler())
  >>> for b in Bookmark.objects.all():
+
  >>> for b in Bookmark.objects.all():
 
  ...    print b.page.url
 
  ...    print b.page.url
 
  ...     
 
  ...     

2020年2月15日 (土) 08:01時点における版

Django 生成されるSQLをロギングする

Django

Django ロギング設定 に変更を加える

  • Django ロギング設定 に、DEBUG = True の時だけ、ログを出力するフィルターを作成
  • django用のロガーを作成
  1. LOGGING = {
  2. 'version': 1,
  3. 'disable_existing_loggers': False,
  4. 'formatters': {
  5. 'verbose': {
  6. 'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
  7. },
  8. 'simple': {
  9. 'format': '%(levelname)s %(message)s'
  10. },
  11. },
  12. 'filters': {
  13. 'require_debug_false': {
  14. '()': 'django.utils.log.RequireDebugFalse'
  15. },
  16. 'require_debug_true': {
  17. '()': 'django.utils.log.RequireDebugTrue'
  18. }
  19. },
  20. 'handlers': {
  21. 'mail_admins': {
  22. 'level': 'ERROR',
  23. 'filters': ['require_debug_false'],
  24. 'class': 'django.utils.log.AdminEmailHandler'
  25. },
  26. 'console':{
  27. 'level':'DEBUG',
  28. 'class':'logging.StreamHandler',
  29. 'formatter': 'verbose'
  30. },
  31. },
  32. 'loggers': {
  33. 'django.request': {
  34. 'handlers': ['mail_admins'],
  35. 'level': 'ERROR',
  36. 'propagate': True,
  37. },
  38. 'django':{
  39. 'handlers': ['console', 'mail_admins'],
  40. 'level': 'DEBUG',
  41. 'filters' : ['require_debug_true'],
  42. },
  43. 'myapp':{
  44. 'handlers': ['console', 'mail_admins'],
  45. 'level': 'DEBUG',
  46. },
  47. }

manage.py shell のときには、以下を実行すればロギングされる

  1. >>> import logging
  2. >>> l = logging.getLogger('django.db.backends')
  3. >>> l.setLevel(logging.DEBUG)
  4. >>> l.addHandler(logging.StreamHandler())
  5. >>> for b in Bookmark.objects.all():
  6. ... print b.page.url
  7. ...
  8. http://google.co.jp
  9. http://yahoo.co.jp
  10. (0.000) SELECT "Bookmark_bookmark"."id", "Bookmark_bookmark"."page_id", "Bookmark_bookmark"."user_id" FROM "Bookmark_bookmark"; args=()
  11. (0.000) SELECT "Bookmark_page"."id", "Bookmark_page"."url" FROM "Bookmark_page" WHERE "Bookmark_page"."id" = 1 ; args=(1,)
  12. (0.004) SELECT "Bookmark_page"."id", "Bookmark_page"."url" FROM "Bookmark_page" WHERE "Bookmark_page"."id" = 2 ; args=(2,)

DjangoのテストでSQLをロギングする

  • セットアップでロガーを有効にする
  1. from django.conf import settings
  2. from django.test import TestCase
  3. from django.test.client import Client
  4.  
  5. class SimpleTest(TestCase):
  6. @staticmethod
  7. def setUpClass():
  8. settings.DEBUG = True
  9. import logging
  10. l = logging.getLogger('django.db.backends')
  11. l.setLevel(logging.DEBUG)
  12. l.addHandler(logging.StreamHandler())