logging所有的SQL查询

我如何logging我的django应用程序执行的所有SQL查询?

我想logging所有内容,包括pipe理站点的SQL。 我看到这个问题和常见问题的答案,但我仍然无法弄清楚我应该放哪里

from django.db import connection connection.queries 

logging一切到一个文件?

所以我的问题是 – 我应该怎么做一个文件(比如all-sql.log)在哪里logging所有SQL语句?

也许看看https://github.com/django-debug-toolbar/django-debug-toolbar

它会让你看到给定页面生成的所有查询。 以及它们发生的地方的栈跟踪等。

编辑:要logging所有的SQL查询文件等,那么你会想创build一些中间件。 中间件可以在每个请求上运行。 这里有几个Django片段:

那些关心打印到terminal,但它不适合使用python的日志库。

将下面的代码片段与settings.pyLOGGING字段合并:

 LOGGING = { 'version': 1, 'filters': { 'require_debug_true': { '()': 'django.utils.log.RequireDebugTrue', } }, 'handlers': { 'console': { 'level': 'DEBUG', 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', } }, 'loggers': { 'django.db.backends': { 'level': 'DEBUG', 'handlers': ['console'], } } } 

调整从@ acardenas89答案

在settings.py中添加以下粗体语句


  如果DEBUG: 
      导入日志 
      l = logging.getLogger('django.db.backends') 
      l.setLevel(logging.DEBUG) 
      l.addHandler(logging.StreamHandler()) 


 LOGGING = {
     '版本':1,
     'disable_existing_loggers':假,
     'filters':{
         'require_debug_false':{
             '()':'django.utils.log.RequireDebugFalse'
         }
     },
     'handlers':{
         'mail_admins':{
             '级别':'错误',
             'filters':['require_debug_false'],
             'class':'django.utils.log.AdminEmailHandler'
         }, 'console':{ 
              '级别':'DEBUG', 
              'class':'logging.StreamHandler', 
          } ,
     },
     'logging器':{
         'django.request':{
             'handlers':['mail_admins'],
             '级别':'错误',
             “传播”:没错,
         }, 'django.db.backends.sqlite3':{ 
              '级别':'DEBUG', 
              'handlers':['console'], 
          } ,
     }
 }

资源/信用

Django 1.3将所有SQL语句logging到django.db.backendslogging器中:

https://docs.djangoproject.com/en/dev/topics/logging/#django-db-backends

你需要把它放在一个中间件包中。 中间件位于webserver / django核心和所有视图之间。 它可以在请求前进行预处理,在请求完成后进行后处理。 例如,将查询保存到一个文件。