Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/peopledoc/django-sql-log

Django SQL Log
https://github.com/peopledoc/django-sql-log

approved-public ghec-mig-migrated

Last synced: about 1 month ago
JSON representation

Django SQL Log

Awesome Lists containing this project

README

        

Django simple SQL log
=====================

.. image:: https://travis-ci.org/peopledoc/django-sql-log.svg?branch=master
:target: https://travis-ci.org/peopledoc/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.

Usage
-----

Add this package to your requirements, and install it the usual way. You
don't have to add the application to the ``INSTALLED_APPS``, there's no
model to sync.

Add the middleware like this:

.. code:: python

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 string
~~~~~~~~~~~~~~~~~

By default, the log format string is:

::

{full_name}_{phase}

In the demo site, this would result in:

::

django_sql_log_demo.views.Index_START

for the START event in the log.

You can customize this format by adding the ``DJANGO_SQL_LOG_FORMAT`` to
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,

Hacking
-------

If you want to run the test-suite, have a look at the ``settings_pg.py`` file
in your ``demo/django_sql_log_demo`` directory.

It carries the basic database settings you'll need to run tox tests and
eventually store demo data. Hopefully, by simply creating a
``settings_pg_local.py`` file, you can override the default credentials to fit
your Postgresql server specifics.

Please bear in mind that the database you'll have to connect to **must exist**
on this server, and that your PG user should be able to *create* and *delete*
databases.

With ``tox`` installed, simply run the command ``tox``. This should run
the tests for Sqlite and postgresql environments, if ready.

Logging in Postgresql
~~~~~~~~~~~~~~~~~~~~~

For 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
your ``postgresql.conf`` file and set this variable::

log_min_duration_statement = 0

For other database systems, please refer to the official documentation.

This software is published under the terms of the MIT License. Please
see the ``LICENSE`` file for more information.