Package: django-sql-log
Goal: provide a middleware that inserts start/stop annotations that
would land on the SQL logs.Like this:2014-12-08 09:33:58 CET LOG:  duration: 0.174 ms  statement: BEGIN
2014-12-08 09:33:58 CET LOG:  duration: 0.502 ms  statement: SET TIME ZONE 'UTC'
2014-12-08 09:33:58 CET LOG:  duration: 0.053 ms  statement: COMMIT
2014-12-08 09:33:58 CET LOG:  duration: 0.228 ms  statement: SHOW default_transaction_isolation
2014-12-08 09:33:58 CET LOG:  duration: 0.043 ms  statement: BEGIN
2014-12-08 09:33:58 CET LOG:  duration: 0.354 ms  statement: SELECT 'django_sql_log_demo.views.Index_START'
2014-12-08 09:33:58 CET LOG:  duration: 1.221 ms  statement: SELECT "dummy_article"."id", "dummy_article"."title", "dummy_article"."body" FROM "dummy_article"
2014-12-08 09:33:58 CET LOG:  duration: 0.118 ms  statement: SELECT 'django_sql_log_demo.views.Index_STOP'
2014-12-08 09:33:58 CET LOG:  duration: 0.067 ms  statement: ROLLBACK
2014-12-08 09:33:59 CET LOG:  duration: 0.179 ms  statement: BEGIN
2014-12-08 09:33:59 CET LOG:  duration: 0.513 ms  statement: SET TIME ZONE 'UTC'
2014-12-08 09:33:59 CET LOG:  duration: 0.054 ms  statement: COMMIT
2014-12-08 09:33:59 CET LOG:  duration: 0.231 ms  statement: SHOW default_transaction_isolation
2014-12-08 09:34:00 CET LOG:  duration: 117.999 ms  statement: DROP DATABASE "test_hello_world"The available middleware has been tested only with Postgresql databases,
but it should work with other SQL-based RDBMs.UsageAdd this package to your requirements, and install it the usual way. You
don’t have to add the application to theINSTALLED_APPS, there’s no
model to sync.Add the middleware like this:MIDDLEWARE_CLASSES=('django_sql_log.middleware.SQLLoggingMiddleware',# ...)Although the order of the middlewares is not crucial, it is better to
make sure that the middleware is near the first place in the list.Log format stringBy default, the log format string is:{full_name}_{phase}In the demo site, this would result in:django_sql_log_demo.views.Index_STARTfor the START event in the log.You can customize this format by adding theDJANGO_SQL_LOG_FORMATto
your settings. Available format variables are (with correspondance in
the demo tests):module_name:django_sql_log_demo.views,func_name:Index,full_name:django_sql_log_demo.views.Index,phase: START or STOP,HackingIf you want to run the test-suite, have a look at thesettings_pg.pyfile
in yourdemo/django_sql_log_demodirectory.It carries the basic database settings you’ll need to run tox tests and
eventually store demo data. Hopefully, by simply creating asettings_pg_local.pyfile, you can override the default credentials to fit
your Postgresql server specifics.Please bear in mind that the database you’ll have to connect tomust existon this server, and that your PG user should be able tocreateanddeletedatabases.Withtoxinstalled, simply run the commandtox. This should run
the tests for Sqlite and postgresql environments, if ready.Logging in PostgresqlFor you information, logs are not activated by default in postgresql settings.
To make sure your log file will display the START/STOP events, go edit
yourpostgresql.conffile and set this variable:log_min_duration_statement = 0For other database systems, please refer to the official documentation.This software is published under the terms of the MIT License. Please
see theLICENSEfile for more information.