Skip to main content

Logging Django errors & capture exceptions to the clickhouse database with daily rotation.

Project description

django-clickhouse-logger

Logging Django errors to the Clickhouse database with daily rotation.

https://github.com/Sobolev5/django-clickhouse-logger

screenshot from Dbeaver

How to use it

To install run:

pip install django-clickhouse-logger # stable version
pip install -U git+https://github.com/Sobolev5/django-clickhouse-logger.git@master # development version

Add Clickhouse logger to INSTALLED_APPS:

INSTALLED_APPS = INSTALLED_APPS + ("django_clickhouse_logger",)

Set Clickhouse logger environment variables in a settings.py:

DJANGO_CLICKHOUSE_LOGGER_HOST = "127.0.0.1" 
DJANGO_CLICKHOUSE_LOGGER_PORT = 9000
DJANGO_CLICKHOUSE_LOGGER_USER = "default"
DJANGO_CLICKHOUSE_LOGGER_PASSWORD = ""
DJANGO_CLICKHOUSE_LOGGER_TTL_DAY = 1 # Log rotation (in days).
DJANGO_CLICKHOUSE_LOGGER_REQUEST_EXTRA = "session" 
# Means request.session. 
# Extra attribute of django.core.handlers.wsgi.WSGIRequest object for logging. 
# For example you define request.company in your custom middleware
# and set DJANGO_CLICKHOUSE_LOGGER_REQUEST_EXTRA = "company" in this case.

Run Clickhouse tables creation script:

python manage.py shell --command="from django_clickhouse_logger.db import *; create_logger_table(); create_capture_exception_table();" 

This script will create the database django_clickhouse_logger with tables logger (Django errors) and capture_exception (Captured exceptions).

Add Clickhouse logger to your logger configuration in settings.py:

LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "filters": {
        "require_debug_true": {"()": "django.utils.log.RequireDebugTrue",}, 
        "require_debug_false": {"()": "django.utils.log.RequireDebugFalse"}
    },
    "formatters": {
        "console": {"format": "%(asctime)s - %(levelname)s - %(message)s"},
    },
    "handlers": {
        "console": {"level": "INFO", "filters": ["require_debug_true"], "class": "logging.StreamHandler", "formatter": "console"},
        "django_clickhouse_logger": {"level": "ERROR", "filters": ["require_debug_false"], "class": "django_clickhouse_logger.handlers.LoggerHandler"},              
    }, 
    "loggers": {
        "django": {"handlers": ["console"], "level": "INFO",},
        "django.request": {"handlers": ["django_clickhouse_logger"], "level": "ERROR", 'propagate': False},
    },
}

If you want to test just change filter require_debug_false to require_debug_true for django_clickhouse_logger handler and raise error in any django view.
For visual interface to the clickhouse table django_clickhouse_logger.logger i recommend to using Dbeaver.

If you want to truncate tables logger or capture_exception just run:

python manage.py shell --command="from django_clickhouse_logger.db import *; truncate_logger_table();"
python manage.py shell --command="from django_clickhouse_logger.db import *; truncate_capture_exception_table();"

Capture exception

To catch exceptions manually:

from django_clickhouse_logger import capture_exception   

try:
    print(undefined_variable)
except Exception as e:
    capture_exception(e)

try:
    print(undefined_variable)
except Exception as e:
    capture_exception(e, "add some text here")

Note: You can integrate capture_exception function in any python project. Django is not necessary in this case.

Integrations

django_clickhouse_logger is default logger for upserver project.
Go to https://github.com/Sobolev5/upserver for further instructions.

Time tracker for developers

Use Workhours.space for your working time tracking. It is free.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

django_clickhouse_logger-0.3.2-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

File details

Details for the file django_clickhouse_logger-0.3.2-py3-none-any.whl.

File metadata

File hashes

Hashes for django_clickhouse_logger-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 cfe97093dfc71d4cdab8041103cb02eeaa2b56885aa53470cfefac235f992612
MD5 7c24bd96af441b53610c503d4601259d
BLAKE2b-256 9569d2a74db359be9dc5d97e4d174fbdcc7a2ea108f70578eefcb29be46d90e9

See more details on using hashes here.

Supported by

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