Skip to main content

Audit Logging

A Django package that extends the default logging mechanism to track CRUD operations and container logs.

Features

  • Automatic logging of CRUD operations (Create, Read, Update, Delete)
  • Tracks both HTTP requests and model changes
  • Custom log levels Audit(21) and API(22) for CRUD and Request-Response auditing.
  • Structured JSON logs for audit trails
  • Human-readable container logs
  • Separate log files for audit and container logs
  • Console and file output options

Installation

  1. Install the package:
pip install audit-logging
  1. Add 'audit_logging' to your INSTALLED_APPS in settings.py:
INSTALLED_APPS = [
    ...
    'audit_logging',
]
  1. Add the middleware to your MIDDLEWARE in settings.py:
MIDDLEWARE = [
    ...
    'audit_logging.middleware.AuditLoggingMiddleware',
]
  1. Configure logging in settings.py:
from audit_logging import *

LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        "json": get_json_formatter(),
        "verbose": get_console_formatter(),
        "api_json": get_api_file_formatter(),
    },
    "handlers": {
        "console": {
            "level": "DEBUG",
            "class": "logging.StreamHandler",
            "formatter": "verbose",
        },
        "file": get_json_handler(level="DEBUG", formatter="json"),
        "api_file": get_api_file_handler(formatter="api_json"),
    },
    "root": {"level": "DEBUG", "handlers": ["console", "file"]},
    "loggers": {
        "audit.request": {
            "handlers": ["api_file"],
            "level": "API",
            "propagate": False,
        },
        "django": {
            "handlers": ["console", "file"],
            "level": "INFO",
            "propagate": False,
        },
    }
}
  1. For external services logging, extend HTTPClient or SFTPClient
class ExternalService(HTTPClient):
    def __init__(self):
        super().__init__("service_name")

    def connect(self):
        url = "https://www.sample.com"
        response = self.get(url) # sample log structure below
  1. Create audit_logs folder in project directory

Log Types

Container Logs

Console Log Format

'%(levelname)s %(asctime)s %(pathname)s %(module)s %(funcName)s %(message)s'
-----------------------------------------------------------------------------
INFO 2025-04-30 08:51:10,403 /app/patients/api/utils.py utils create_patient_with_contacts_and_diseases Patient 'd6c9a056-0b57-453a-8c0f-44319004b761 - Patient3' created.

File Log Format

{
    "timestamp": "2025-05-15 13:38:02.141",
    "level": "DEBUG",
    "name": "botocore.auth",
    "path": "/opt/venv/lib/python3.11/site-packages/botocore/auth.py",
    "module": "auth",
    "function": "add_auth",
    "message": "Calculating signature using v4 auth.",
    "exception": "",
    "request": "",
    "extra_fields": ""
}

Request-Response Log

Incoming Log Format

{
    "timestamp": "2025-05-19 15:25:27.836",
    "level": "API",
    "name": "audit.request",
    "message": "Audit Internal Request",
    "service_name": "review_board",
    "request_type": "internal",
    "protocol": "http",
    "request_repr": {
        "method": "GET",
        "path": "/api/v1/health/",
        "query_params": {},
        "headers": {
            "Content-Type": "application/json",
        },
        "user": null,
        "body": {
            "title": "hello"
        }
    },
    "response_repr": {
        "status_code": 200,
        "headers": {
            "Content-Type": "application/json",
        },
        "body": {
            "status": "ok"
        }
    },
    "error_message": null,
    "execution_time": 5.376734018325806
}

External Log format

{
    "timestamp": "2025-05-19 15:25:27.717",
    "level": "API",
    "name": "audit.request",
    "message": "Audit External Service",
    "service_name": "apollo",
    "request_type": "external",
    "protocol": "http",
    "request_repr": "{'endpoint': 'https://www.sample.com', 'method': 'GET', 'headers': {}, 'body': {}}",
    "response_repr": "{'status_code': 200, 'body': {'title': 'title', 'expiresIn': 3600, 'error': None, 'errorDescription': None}}",
    "error_message": "",
    "execution_time": 5.16809344291687
}

License

This project is licensed under the MIT License - see the LICENSE file for details.

Metadata

Release files for audit-logging 0.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for audit-logging 0.0.2
File Size Uploaded
audit_logging-0.0.2.tar.gz 12.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for audit-logging 0.0.2
File Interpreter ABI Platform
audit_logging-0.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 27.3 kB

Release files / audit_logging-0.0.2.tar.gz

Download URL audit_logging-0.0.2.tar.gz
Size 12.9 kB
Tags Source
SHA-256 checksum
How to use checksums
4122799d190a56a76c43b69c5ab24907f48c1ff330aefe31825c7fc3fffe2e1b
BLAKE2b-256 checksum
How to use checksums
76af3face559c6fc27b144be3c26f8e14697c198fe19648b34111cf99cc2ca9d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-httpx/0.28.1

Release files / audit_logging-0.0.2-py3-none-any.whl

Download URL audit_logging-0.0.2-py3-none-any.whl
Size 14.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
085dee712d12a2b7b3eb823576416de321c2e8d53353965b31e09f1a2cc857fc
BLAKE2b-256 checksum
How to use checksums
994fe457e77194c23cf6ae8ea6476e3f3f4819b3cd10abab24e12f235896d1e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-httpx/0.28.1

Release history Release notifications | RSS feed

This release

0.0.2 This release

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page