Metadata-Version: 2.0
Name: django-sql-log
Version: 1.2.1
Summary: Write Start/Stop events in your SQL logs.
Home-page: https://github.com/novafloss/django-sql-log
Author: Novapost
Author-email: bruno.bord@novapost.fr
License: UNKNOWN
Keywords: django SQL log postgresql
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Topic :: Database
Classifier: Topic :: System :: Logging
Requires-Dist: Django

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

.. image:: https://travis-ci.org/novafloss/django-sql-log.svg?branch=master


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.


