Skip to main content

Per-model audit logs to TABLENAME_log with entry-point capture (HTTP/management/shell/celery)

Project description

Awesome Audit Log for Django

PyPI version codecov Python versions License

This is an awesome package to have your models logs in corresponding _log tables.

Having a single model/table as audit storage can cause heavy db operation and useless for large applications.

With this package you will have each model log in a separate table which can be beneficial if you want to truncate a specific model logs or run a query on them.

You can choose between having logs table in your default database or adding a new backend db as logs db.

Supported DBs to store logs:

  1. PostgreSQL
  2. MySQL
  3. SQLite

This package is in its early stage development and the following features will be added ASAP:

  1. Log rotation
  2. Mongo DB support
  3. Add management, shell, celery as entry point of logs
  4. Document page!

Compatible With

This package works on the below listed Django, Python versions and Databases.

  • Django versions: 4.2, 5.0, 5.1
  • Python versions: 3.10, 3.11, 3.12
  • Databases: SQLite, PostgreSQL, MySQL
  • Celery: Optional for Async logging

Installation

  1. Add App
INSTALLED_APPS = [
    # ...
    'awesome_audit_log.apps.AwesomeAuditLogConfig',
]
  1. Add Middleware
MIDDLEWARE = [
    # ...
    "awesome_audit_log.middleware.RequestEntryPointMiddleware",
]
  1. Settings
AWESOME_AUDIT_LOG = {
    "ENABLED": True,
    "DATABASE_ALIAS": "default",
    # PostgreSQL schema for audit tables (defaults to 'public')
    "PG_SCHEMA": None,
    # Enable async logging with Celery (requires Celery to be installed and configured)
    "ASYNC": False,
    # "all" or list like ["app_label.ModelA", "app.ModelB"]
    "AUDIT_MODELS": "all",
    # like AUDIT_MODELS but for opt-out, useful when AUDIT_MODELS set to all
    "NOT_AUDIT_MODELS": None,
    "CAPTURE_HTTP": True,
    # set to False means if audit db is unavailable, silently skip logging (with a warning) instead of raising
    "RAISE_ERROR_IF_DB_UNAVAILABLE": False,
    # if audit alias missing/unavailable, use 'default' intentionally, this requires RAISE_ERROR_IF_DB_UNAVAILABLE is set to False
    "FALLBACK_TO_DEFAULT": False,
}

Async Logging with Celery

This package supports async audit logging using Celery. When ASYNC is set to True, audit logs will be inserted asynchronously using Celery tasks, which can improve performance for high-traffic applications.

Setup

  1. Install Celery (if not already installed):
pip install celery
  1. Configure Celery in your Django project (this package doesn't configure Celery for you):
# settings.py
CELERY_BROKER_URL = 'redis://localhost:6379/0'  # or your preferred broker
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
  1. Enable async logging:
AWESOME_AUDIT_LOG = {
    "ASYNC": True,  # Enable async logging
    # ... other settings
}

Notes

  • The package automatically detects if Celery is available and falls back to synchronous logging if not
  • Works with any Celery broker (Redis, RabbitMQ, database, etc.)
  • No additional configuration is required in this package - it uses your existing Celery setup
  • Async logging is disabled by default for backward compatibility
  • Important: Timestamps are captured at event time, not at database insert time, ensuring accurate audit logs even with async processing

Timestamp Accuracy

This package ensures that audit log timestamps (created_at) accurately reflect when events occur, not when they're saved to the database. This is especially important for async logging where there may be a delay between the event and database insertion.

See MIGRATION_GUIDE.md if you're upgrading from a version prior to 1.0.0.

Development

Preparation

# Install dependencies
poetry install

Running Tests and Linter Locally

# Run tests
poetry run pytest

# Run linting
poetry run ruff check awesome_audit_log tests
poetry run ruff format --check awesome_audit_log tests

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

awesome_audit_log_django-1.1.1.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

awesome_audit_log_django-1.1.1-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

Details for the file awesome_audit_log_django-1.1.1.tar.gz.

File metadata

  • Download URL: awesome_audit_log_django-1.1.1.tar.gz
  • Upload date:
  • Size: 12.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.12.12 Linux/6.11.0-1018-azure

File hashes

Hashes for awesome_audit_log_django-1.1.1.tar.gz
Algorithm Hash digest
SHA256 b148322a2304ab9787e5c40c1fcf6ae79a8b43c0f7ffd55f079e7b7371aea220
MD5 b8b04513a283090fa07b4186989188b1
BLAKE2b-256 04fee0b6a6e633b58ed616a6b8faba6a7d490865c6a916b259985513231d7dec

See more details on using hashes here.

File details

Details for the file awesome_audit_log_django-1.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for awesome_audit_log_django-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8eb84ed3ff17f6124658fe6e9f58313f7f69094ecc3302872223bb97606d87c8
MD5 7c847600104c5c295fb4e44c0e1e5275
BLAKE2b-256 d0800061a113cbeb8e8cfbf44e595351d6ca2a0219b77fe921676d5b63a62b81

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page