django-simple-log 0.0.8 2017-05-20 ✔ PY2 ✔ PY3

django-simple-log on PyPI  

Logging django models changes.


AuthorGrigory Mishchenko
Keywords django log audit history

Django simple log

Logging model changes on every create/update/delete.

TL;DR

Install using pip:

$ pip install django-simple-log

Add to installed apps:

INSTALLED_APPS = (
    ...
    'simple_log',
    ...
)

Add middleware for detecting user:

MIDDLEWARE = [
    ...
    'simple_log.middleware.ThreadLocalMiddleware',
    ...
]

For django 1.8:

$ pip install django-jsonfield django-transaction-hooks
DATABASES = {
    'default': {
        'ENGINE': 'transaction_hooks.backends.postgresql_psycopg2',
        ...
    }
}

Migrate:

$ python manage.py migrate

Add to any __init__.py:

import simple_log

# For track all registered applications, including third-party
simple_log.register()
# Or for concrete model
simple_log.register(Model)
# Or multiple models
simple_log.register(Model, AnotherModel)
# For define log model
simple_log.register(Model, AnotherModel, log_model=CustomLogModel)

Disable logging

For temporary disable logging:

from simple_log.utils import disable_logging

with disable_logging():
    # create/update/delete objects

Commands

To view which models is tracking:

$ python manage.py view_tracking_models

With option -f you can view which fields is tracking for every model.

Settings

SIMPLE_LOG_MODEL_LIST

Default: ()

If set, than simple_log.register() register only models in the list.

If you use simple_log.register(Model), this setting will be ignored.

SIMPLE_LOG_EXCLUDE_MODEL_LIST

Default: ('admin.LogEntry', 'migrations.Migration', 'sessions.Session', 'contenttypes.ContentType', 'captcha.CaptchaStore')

If set, than simple_log.register() register every model except in the list.

If you use simple_log.register(Model) or SIMPLE_LOG_MODEL_LIST, this setting will be ignored.

SIMPLE_LOG_EXCLUDE_FIELD_LIST

Default: ('id', 'last_login', 'password', 'created_at', 'updated_at')

List of field names which not track.

If you need to define which fields to track for concrete model, you can add one of the properties to model: simple_log_fields = ('id',) or simple_log_exclude_fields = ('password',).

SIMPLE_LOG_ANONYMOUS_REPR

Default: 'Anonymous'

User representation that write to log, if anonymous user changes model.

SIMPLE_LOG_NONE_USER_REPR

Default: 'System'

User representation that write to log, if user not detected (If middleware not working or if model changes from task or console).

SIMPLE_LOG_MODEL

Default: 'simple_log.SimpleLog'

Model for writing logs. If you want to define your own model, you can inheritance from simple_log.SimpleLogAbstract and change this setting.

SIMPLE_LOG_MODEL_SERIALIZER

Default: 'simple_log.models.ModelSerializer'

Class for serializing model fields to json.

SIMPLE_LOG_GET_CURRENT_REQUEST

Default: 'simple_log.utils.get_current_request_default'

Function that return current request. Rewrite this setting if you already have middleware for storing current request.

SIMPLE_LOG_OLD_INSTANCE_ATTR_NAME

Default: '_old_instance'

Attribute’s name for storing old instance of logging object.